【发布时间】:2012-06-05 20:32:39
【问题描述】:
我有一个 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:stackoverflow.com/questions/2884011/…
-
@felipeoriani - 谢谢,我看到了,但出于上述原因,我希望避免使用通用存储库模式。考虑到特定于服务的存储库,我想知道我是否正在以最好的方式做到这一点。
-
阅读这篇文章。将我的架构改得更好:cuttingedge.it/blogs/steven/pivot/entry.php?id=92 完成后,回去阅读这篇文章:cuttingedge.it/blogs/steven/pivot/entry.php?id=91
标签: asp.net-mvc asp.net-mvc-3 repository repository-pattern service-layer