我有一个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