asp.net-mvc – 存储库层中的服务层重复功能
我有一个ASP.NET MVC应用程序,我正在使用存储库模式,特定于服务的存储库.我发现我的设置开始感觉非常重复.
我的图层看起来像这样: 控制器接受构造函数中的服务以获得可测试性: 该服务接受存储库: 用户可能能够更新其业务信息,更改其姓名,发送电子邮件,删除联系地址等. 所以我最终在服务中得到了这样的东西: 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,不断重复自己.这是我能得到的接近,还是有更有效的方法来做到这一点?谢谢. 解决方法
第一.服务层不应重复存储库功能.而不是UserService.UpdateUser函数,应该有UserService.UpdateBasicData,UserService.UpdatePassword获取用户对象字段的子集.通常不应在服务中公开ORM层对象.用户对象肯定有许多属性,UpdateUser函数不应该更改它们,所以它不应该误认为服务使用者,它可能会改变它们.
第二.您仍然可以使用通用存储库并进行存储库聚合以进行注入.例: public class UserRelatedRepositories : IUserRelatedRepositories { IRepository<User> User { get; set; } IRepository<Business> Business { get; set; } } 然后使用 UserRelatedRepositories.User.Create() (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 如何自定义ASP.NET Web API AuthorizeAttribute的异常要求
- asp.net的ftp的上传和下载
- ASP.NET Core应用中如何记录和查看日志
- asp.net-mvc – 使用KendoUI Grid的KendoUI编辑器模板问题
- js_jquery_创建cookie有效期问题_时区问题
- asp.net – GET与POST真的很重要吗?
- asp.net-mvc – 如何降级Visual Studio 2012中的Entity Fra
- asp.net – 从Repeater中检索TextBox值
- 单元测试 – MVC3中的单元测试控制器会话变量
- asp.net – 在Azure上增加AppPool超时的优点/缺点