我正在處理分層的ASP.Net MVC 3 Web應用程序(EF 4.1):模型,存儲庫,服務,控制器,某些情況下的ViewModels和視圖。實體服務類應調用另一個實體的服務或其存儲庫
現在我的問題是最佳實踐之一。是否需要訪問另一個實體的實體服務類使用其服務或存儲庫。例如,假設實體A的服務方法需要在創建A時更新實體B. A的服務類應該使用B的存儲庫還是服務層?兩者都是可能的,但最佳做法是什麼?就個人而言,我寧願一項服務來訪問另一項服務。這樣,就可以接觸到更多進化方法。
我正在處理分層的ASP.Net MVC 3 Web應用程序(EF 4.1):模型,存儲庫,服務,控制器,某些情況下的ViewModels和視圖。實體服務類應調用另一個實體的服務或其存儲庫
現在我的問題是最佳實踐之一。是否需要訪問另一個實體的實體服務類使用其服務或存儲庫。例如,假設實體A的服務方法需要在創建A時更新實體B. A的服務類應該使用B的存儲庫還是服務層?兩者都是可能的,但最佳做法是什麼?就個人而言,我寧願一項服務來訪問另一項服務。這樣,就可以接觸到更多進化方法。
我傾向於迴避這些決策的常用原則和實踐;幹(不要重複自己)和KISS(保持簡單,愚蠢)可能適用於此。
除非由於繞過實體B的服務類而需要重複某些邏輯,否則我會直接從實體A的服務類中調用實體B的存儲庫。
這是一個小細節,但它意味着有一個涉及的類(ServiceClassA> RepositoryClassB,而不是ServiceClassA> ServiceClassB> RepositoryClassB),這使得它成爲我腦海中更簡單的解決方案。
HTH
我寧願服務類之間的調用,因爲你可能還需要從其他服務的一些業務邏輯。但要小心避免循環依賴。我建議你使用依賴注入來幫助你避免可能的循環依賴。另外考慮爲你的服務類創建接口並使用你的客戶類的接口(把具體的實現傳遞給構造函數)。
然後你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
}
}