我有一个 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,并且不断重复自己。这是尽可能接近,还是有更有效的方法来做到这一点?谢谢。