2011-09-04 77 views
6

我正在處理分層的ASP.Net MVC 3 Web應用程序(EF 4.1):模型,存儲庫,服務,控制器,某些情況下的ViewModels和視圖。實體服務類應調用另一個實體的服務或其存儲庫

現在我的問題是最佳實踐之一。是否需要訪問另一個實體的實體服務類使用其服務或存儲庫。例如,假設實體A的服務方法需要在創建A時更新實體B. A的服務類應該使用B的存儲庫還是服務層?兩者都是可能的,但最佳做法是什麼?就個人而言,我寧願一項服務來訪問另一項服務。這樣,就可以接觸到更多進化方法。

回答

1

我傾向於迴避這些決策的常用原則和實踐;幹(不要重複自己)和KISS(保持簡單,愚蠢)可能適用於此。

除非由於繞過實體B的服務類而需要重複某些邏輯,否則我會直接從實體A的服務類中調用實體B的存儲庫。

這是一個小細節,但它意味着有一個涉及的類(ServiceClassA> RepositoryClassB,而不是ServiceClassA> ServiceClassB> RepositoryClassB),這使得它成爲我腦海中更簡單的解決方案。

HTH

0

我寧願服務類之間的調用,因爲你可能還需要從其他服務的一些業務邏輯。但要小心避免循環依賴。我建議你使用依賴注入來幫助你避免可能的循環依賴。另外考慮爲你的服務類創建接口並使用你的客戶類的接口(把具體的實現傳遞給構造函數)。

然後你SericesA會看:

class ServiceA : IServiceA 
{ 
    public ResultA Method1() { //some logic }; 
    public void Method2() { //some logic }; 
} 

ServiceB取決於ServcieA。

class ServiceB: IServiceB 
{ 
    private IServiceA _serviceA; 
    public ServiceB(IServiceA serviceA) 
    { 
     _serviceA = serviceA; 
    } 

    public ResultB Method() 
    { 
     var result = _serviceA.Method1(); 
     // get result from service A and create and return result for service B 
    } 
}