在使用存儲庫和服務模式的應用程序中,如何確保始終調用服務層,而不是直接調用存儲庫?存儲庫/服務模式和數據一致性
例子:
class OrderRepository
{
void CreateOrder(Order o)
...
}
class OrderService
{
void CreateOrder(Order o)
{
//make some business logic tests
...
//call repository
_orderRepository.CreateOrder(o);
}
}
我看到兩個問題:
程序員可以調用庫直接,因爲它不知道服務是否存在等(有時它不是那麼簡單在這個例子中(1個服務= 1個存儲庫具有相同的方法名稱),一些應用程序沒有很好的記錄,或者有人急於忘記檢查相應的服務是否存在(錯誤))。
完全不同:很久以前,有人創建了一些視圖+直接使用訂單倉庫的控制器。那時不需要進行業務邏輯檢查或額外的操作,只需要訂單存儲庫(因爲它根本不需要)。如果以後,在創建訂單時需要一些額外的操作,將創建一項服務。問題在於所有進行舊存儲庫調用的控制器都需要更改。存儲庫原理/想法(以及分層代碼)是否應該使部件彼此獨立?
「......應該讓零件相互獨立嗎?」這是一個誤解。它旨在使*責任*彼此獨立。 'OrderRepository'仍然負責從數據庫中提取數據並將數據保存到數據庫,'OrderService'用於應用管理訂單的邏輯。嘗試通過改進方法名稱來使這些責任更加清晰。 「SaveOrder」而不是'CreateOrder'代替'OrderRepository'是一種方法。換句話說: – 2012-04-26 20:32:44