从UI层执行查询的指导

时间:2011-07-15 18:39:25

标签: .net architecture domain-driven-design data-access-layer

我正在尝试建立一个关于如何从UI(控制器)层执行查询的约定。以下是我的三个选择:

  1. 将每个查询包装到自己的查询对象中。 (似乎导致了类爆炸,但更好的封装)。
  2. 提供服务外观层,以便将相关查询分组在一起。 (打破SRP并在整个过程中进行缓存。当并非所有查询方法都需要缓存时,缓存装饰器会更加痛苦。)
  3. 提供包装EF或其他内容的IDbReadContext。 (暴露出可能或可能不坏的IQueryable。也没有给出一点缓存,因为多个对象可能运行相同的查询。
  4. 任何指导或建议都会很棒!

1 个答案:

答案 0 :(得分:1)

我倾向于为每个查询使用一个类,因为我发现它有几个优点。每个查询类都更好地遵循单一责任原则,但也更好地遵循开放 - 封闭原则 - 通过添加新代码并在每个查询封装在自己的类中时不更改现有代码,更容易在系统中进行更改。当每个查询都是自己的类时,使用面向方面的技术系统地应用诸如日志记录,授权和缓存等交叉行为也更容易。

有时,我会设计一个带有多个重载的查询类,用于使用不同的参数集调用查询,但是我尝试只在结果在逻辑上相同时才从略微不同的上下文中检索到 - 重载之间的可重用性是一个很好的指示