存储库模式重用和查询支持的问题

时间:2009-07-28 03:57:07

标签: activerecord repository-pattern castle-monorail querying

我一直在阅读ddd和PoEAA书籍,并在网上搜索了很多,但我仍然感到困惑,我认为有一些关于存储库模式的缺失:

使用环境:网络应用程序(单轨+主动记录)

我在寻找什么:

  1. 在项目中重用“基础”存储库。存储库将是典型的IRepository< T>。具有创建,更新,删除和查询支持。
  2. 使用装饰链来支持日志记录等。
  3. 制定一致的查询策略。
  4. 我想将Linq用于Activerecord。
  5. 不希望在回购中公开IQueryable或任何依赖。
  6. 注意:我不会去ddd。由于以前的原因,我想从中受益。

    现在我想到的问题是:

    1. 如果我选择通用存储库,我遇到了处理不支持删除的实体的问题,举个例子。我可以暴露一个接口并使其显式化,但这听起来像是以肮脏的方式解决问题。
    2. 如何查询?这真的让我感到困惑 最初,我在存储库中绘制了Query方法,以接受Expression& ltFunc& ltT,bool>>。你怎么看? 规范模式有很多东西,我没有很好的区别?这个让我很困惑。似乎更像是一个领域概念,有时候查询不是 查询对象:据我所知,我需要一些对象来翻译我的仓库中收到的查询对象。这听起来太多了。我错过了什么?
      另一个选择是暴露GetOutstandingProducts,但我需要一个IProductRepository并将其基于通用的。我喜欢这个:更好地表达契约,并且更有意义的是在构造函数上需要这个而不是IRepository的控制器。 现在,使用最后一个选项:在通用仓库中更新,创建和删除将是超级简单的(类似于ActiveRecordMediator.Update(..);并且这不会很好。似乎它不是很好的重用,它更多另外一个抽象层次。
    3. 希望你们能为我们提供一些帮助。似乎是一个非常简单的概念,我无法得到它。

      感谢阅读。

0 个答案:

没有答案