asp.net-mvc – MVC:存储库和服务
我对存储库中定义的内容的限制以及要留给服务的内容感到困惑.存储库是否应仅创建与数据库中的表匹配的简单实体,还是可以使用这些实体的组合创建复杂的自定义对象?
换句话说:服务是否应该在存储库上进行各种Linq to SQL查询?或者是否应在存储库中预定义所有查询,业务逻辑只是决定调用哪种方法? 解决方法
你实际上在这里提出了一个问题,目前在开发者社区中引发了很多讨论 – 请参阅
Should my repository expose IQueryable?的后续评论
存储库可以 – 并且应该 – 创建包含多个关联实体的复杂组合对象.在域驱动设计中,这些被称为聚合 – 相关对象的集合被组织成一些有凝聚力的结构.您的代码不必单独调用GetCustomer(),GetOrdersForCustomer(),GetInvoicesForCustomer() – 您只需调用myCustomerRepository.Load(customerId),然后使用已经实例化的属性返回深度客户对象.我还应该补充一点,如果您基于特定的数据库表返回单个对象,那么这是一种非常有效的方法,但它并不是真正的存储库 – 它只是一个数据访问层. 一方面,有一个令人信服的论点,即Linq-to-SQL对象具有“智能”属性和延迟执行(即在实际使用之前不加载Customer.Orders)是存储库模式的完全有效的实现,因为您实际上并没有运行数据库代码,所以您正在运行LINQ语句(然后由底层LINQ提供程序将其转换为DB代码) 另一方面,正如Matt Briggs的帖子指出的那样,L2S与你的数据库结构(每个表一个类)紧密耦合,并且有局限性(例如,没有多少映射) – 你可能最好使用L2S在存储库中进行数据访问,然后将L2S对象映射到您自己的域模型对象上并返回这些对象. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net – HTML敏捷包删除break标签关闭
- asp.net-mvc-3 – 使用ViewModel时不显示MVC3自定义验证错误
- .net – 什么是类的默认访问修饰符?
- asp.net-mvc – Bootstrap进度条在MVC中缺少条带
- asp.net – 文本框在点击输入时关注按钮?
- asp.net-mvc – Globalize.addCultureInfo不是一个函数
- asp.net – 设置身份验证表单loginUrl动态?
- asp.net – 如何让Autofac在Orchard CMS中执行属性注入
- asp.net – 是否可以访问位于另一个项目的MVC视图?
- asp.net – 在会话中存储值是否安全?
- asp.net-mvc – 使用自定义[required]属性时使用
- asp.net-mvc-3 – 在web.config文件中忽略resour
- asp.net mvc客户端验证
- ASP.NET – jQuery ajax调用队列而不是并发运行?
- asp.net-mvc-4 – 在MVC4中使用DotNetOpenAuth获
- 单元测试 – 单元测试 – 不能从理论转向实践
- asp.net-mvc – ASP.NET MVC路由
- asp.net – 使用ClientScriptManager.RegisterFo
- asp.net-mvc – 如何gzip内容在asp.net MVC?
- asp.net FileUpload.FileName返回完整路径,即ie,