我一直在阅读ddd和PoEAA书籍,并在网上搜索了很多,但我仍然感到困惑,我认为有一些关于存储库模式的缺失:
使用环境:网络应用程序(单轨+主动记录)
我在寻找什么:
- 在项目中重用“基础”存储库。存储库将是典型的IRepository< T>。具有创建,更新,删除和查询支持。
- 使用装饰链来支持日志记录等。
- 制定一致的查询策略。
- 我想将Linq用于Activerecord。
- 不希望在回购中公开IQueryable或任何依赖。
醇>
注意:我不会去ddd。由于以前的原因,我想从中受益。
现在我想到的问题是:
- 如果我选择通用存储库,我遇到了处理不支持删除的实体的问题,举个例子。我可以暴露一个接口并使其显式化,但这听起来像是以肮脏的方式解决问题。
- 如何查询?这真的让我感到困惑
最初,我在存储库中绘制了Query方法,以接受Expression& ltFunc& ltT,bool>>。你怎么看?
规范模式有很多东西,我没有很好的区别?这个让我很困惑。似乎更像是一个领域概念,有时候查询不是
查询对象:据我所知,我需要一些对象来翻译我的仓库中收到的查询对象。这听起来太多了。我错过了什么?
另一个选择是暴露GetOutstandingProducts,但我需要一个IProductRepository并将其基于通用的。我喜欢这个:更好地表达契约,并且更有意义的是在构造函数上需要这个而不是IRepository的控制器。
现在,使用最后一个选项:在通用仓库中更新,创建和删除将是超级简单的(类似于ActiveRecordMediator.Update(..);并且这不会很好。似乎它不是很好的重用,它更多另外一个抽象层次。
醇>
希望你们能为我们提供一些帮助。似乎是一个非常简单的概念,我无法得到它。
感谢阅读。