DDD实体框架存储库返回复杂类型

时间:2014-01-21 17:01:40

标签: asp.net-mvc entity-framework domain-driven-design ddd-repositories aggregateroot

我有一个名为LeadRepository的存储库,它返回一个名为Lead的模型,该模型是一个人。

我拥有的UI是一个显示以下统计信息的仪表板。他们都是领导者,但处于不同的状态。

总线:52

指定:49

未分配:3

联系:49

未接触:0

我正在使用存储过程来查询数据库。所以我没有使用延迟加载来计算出计数。

我已经考虑过以下两种可能的解决方案,但他们都没有感觉到正确。

  1. 使用LeadRepository,但在其上有一个名为GetStats()的方法,它返回一个复杂类型。这与agg root Lead没有任何关联。只是一堆具有不同计数的属性。

  2. 创建一个LeadStatsRepository,但这不是一个聚合根,因为它没有id。它只是一组分组的数据。

  3. 如果有人有任何建议会很棒。

2 个答案:

答案 0 :(得分:3)

存储库用于聚合根。您所追求的是阅读模型和专用查询对象。

答案 1 :(得分:1)

统计信息最好通过服务处理。从埃文斯的DDD,一个好的服务有这些特点:

  • 该操作涉及的域概念不是实体或值对象的自然部分
  • 界面是根据域模型中的其他元素定义的
  • 操作无状态

统计信息与域对象相关,但实际上并不是实体或值对象的一部分。它们可能不是根据其他元素定义的,但它是可能的。没有任何国家有统计数据,即使长期保持这些状态也不是真正的有状态。