![]() |
1
5
你可以用你的建议来测试你的控制器。 但是,如何在数据服务中测试您的查询呢?假设您有非常复杂的查询行为,使用多个复杂的查询返回结果(检查安全性,然后查询Web服务,然后查询EF等)。 你可以把它放在控制器里,但那显然是错误的。 当然,它应该放在您的服务层中。您可以模拟/伪造服务层来测试控制器,但现在您需要测试服务层。 如果不连接到DB(或Web服务)就可以这样做,那就太好了。这就是存储库的所在。
数据服务可以使用“哑”存储库作为数据源,在该存储库上它可以执行复杂的查询。然后,您可以用一个使用
唯一让人困惑的是大量的例子显示控制器直接与存储库通信。(S arp架构,我在看你)如果你在看这些例子,并且你已经有了一个服务层,那么我同意很难看到知识库的好处。但是,如果您只考虑对服务层本身进行测试,而不打算让控制器直接与存储库通信,那么它就开始变得更有意义了。 |
![]() |
2
2
埃因德的NHibernate项目和其他名声 agrees with you. 一些域驱动的设计人员建议您应该有一个从控制器调用的服务(与Web服务不同)层,但是DDD通常应用于复杂的域。在简单的应用程序中,您所做的工作是可以测试的。 |
![]() |
3
0
您缺少的是更新、创建和删除对象的能力。如果这不是一个问题,那么接口可能已经足够好了(尽管我会让它从
|
![]() |
4
0
存储库模式与实体框架无关,尽管实体框架实现了一个“存储库”模式。
存储库接口(比如
但是它的实现
此实现可以使用实体或任何ORM.. 因此,答案是:这不是真正必要的,但建议使用存储库模式,尽管使用实体ORM作为保持域层和持久层之间分离的良好实践。因为这就是存储库模式的目的: 域逻辑和信息保存方式之间的关注分离 . 当从域级别使用存储库模式时,您只需抽象自己并认为“我想存储这些信息,我不在乎它是如何完成的”,或者“我想要这些信息的列表,我不在乎从何处获取它们,也不在乎如何检索它们”。把它们给我。 实体框架与域层无关,它只是一种持久化对象的好方法,但应该存在于存储库实现中(持久层)。 |
![]() |
Naghi · 如何将ssh隧道远程添加到现有的repo? 1 年前 |
|
dc2023 · 有没有办法在特定的分支上进行git镜像克隆? 2 年前 |
![]() |
Veotani · 如何注册通用存储库的依赖关系? 7 年前 |
![]() |
topcool · Asp核心,对象引用未设置为存储库模式中对象的实例 7 年前 |