加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc – MVC:存储库和服务

发布时间:2020-12-16 03:42:52 所属栏目:asp.Net 来源:网络整理
导读:我对存储库中定义的内容的限制以及要留给服务的内容感到困惑.存储库是否应仅创建与数据库中的表匹配的简单实体,还是可以使用这些实体的组合创建复杂的自定义对象? 换句话说:服务是否应该在存储库上进行各种Linq to SQL查询?或者是否应在存储库中预定义所
我对存储库中定义的内容的限制以及要留给服务的内容感到困惑.存储库是否应仅创建与数据库中的表匹配的简单实体,还是可以使用这些实体的组合创建复杂的自定义对象?

换句话说:服务是否应该在存储库上进行各种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对象映射到您自己的域模型对象上并返回这些对象.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读