我有一個ASP.NET MVC應用程序,我正在使用存儲庫模式以及服務特定的存儲庫。我發現我的設置開始感覺非常重複。服務層重複存儲庫層中的函數
我的層是這樣的: UserController中> UserService> UserRepository(庫然後使用實體框架)
控制器接受服務在構造爲可測性: public UserController(IUserService userService)
該服務接受存儲庫: public UserService(IUserRepository)
用戶可能能夠更新他們的商業信息,更改他們的名字,電子郵件,刪除聯繫地址等。
所以我結束了在服務這樣的事情:
public class UserService {
User CreateUser(....);
User GetUserById(int id);
void UpdateUser(User user);
void DeleteUser(User user);
Business CreateBusiness(...);
Business GetBusinessById(int businessId);
void UpdateBusiness(Business business);
void DeleteBusiness(Business business);
IEnumerable<Business> GetBusinessesByUserId();
IEnumerable<BusinessType> GetBusinessTypes();
...
...
...
在倉庫層每個函數調用的函數是這樣的:
public class UserRepository {
User CreateUser(....);
User GetUserById(int id);
void UpdateUser(User user);
void DeleteUser(User user);
Business CreateBusiness(...);
Business GetBusinessById(int businessId);
void UpdateBusiness(Business business);
void DeleteBusiness(Business business);
IEnumerable<Business> GetBusinessesByUserId();
IEnumerable<BusinessType> GetBusinessTypes();
...
...
...
任何時候,我需要做任何類型的CRUD /數據訪問操作,我發現自己正在執行以下操作:
- 將操作添加到存儲庫的接口
- 實現和代碼庫函數
- 添加操作到業務層的接口
- 實現和代碼的服務功能調用上述庫函數
這是越來越繁瑣,尤其是當有與特定服務/存儲庫相關的多個實體。在整個應用程序中乘以多個存儲庫和服務...
爲了背景,我不再使用通用存儲庫,以避免將多個存儲庫左右注入服務和/或控制器構造函數(或單個服務函數)的複雜性。
看來我違反DRY,並不斷重複自己。這是儘可能接近,或者是否有更有效的方法來做到這一點?謝謝。
我也問過這樣的事情在過去,看看我的awser:http://stackoverflow.com/questions/2884011/service-layer-are - 重複我的庫 –
@felipeoriani - 謝謝,我看到了,但我希望避免一個通用的存儲庫模式,由於上述原因。我想知道如果我是儘可能以最好的方式做到這一點,那麼給定服務特定的存儲庫。 – Josh
閱讀這篇文章。改變了我的體系結構:http://www.cuttingedge.it/blogs/steven/pivot/entry.php?id=92完成後,請回頭閱讀以下內容:http://www.cuttingedge .it/blogs/steven/pivot/entry.php?id = 91 – danludwig