领域驱动设计:如何检索复杂数据列表

时间:2009-08-27 14:13:19

标签: c# oop domain-driven-design

我一直在使用我目前对域驱动设计的理解来构建一个新的应用程序。到目前为止,我有一堆代表我的域中的实体的类和一个从/ persist到数据库的存储库。

我遇到的问题是在UI中我需要显示一些列表,其中列表中的项目不直接映射到我的域中的任何实体。某些列表可以通过对某些实体进行相当深入的加载来构建,但是其他数据基本上是在检索时合成的,并且不是任何实体的一部分。让我举一个例子,希望能更清楚地解释这个问题。

在我的域名中,我对这些评估进行了评估(一组要回答的问题)和回复(每个用户为评估提供的答案)。我也有行动。每个操作代表一个响应(提交,批准,拒绝等)的操作。我也有用户。

我需要显示的其中一个数据列表包括响应和评估(尚未响应),然后每行包含有关当前正在使用响应的用户的信息(这是在检索时确定的)通过查看对响应采取的行动来确定时间。每个订单项还包含零个或多个子项,这些项目是迄今为止对响应采取的操作。

问题是,到目前为止,我无法用我的域实体表示整个数据集。我的第一反应是从数据库中检索数据表并绕过我的域实体。但是我认为在处理域对象和将不同实体之间的关系融入对象本身时有很多价值。所以我的下一个想法是修改我的域实体以支持这些列表,但我担心我会为我的实体添加奇怪的属性只是为了支持这些列表场景并且我可能会因为基本上深度负载而损害性能当我只在我的应用程序中的几个地方需要这些数据时的对象。

2 个答案:

答案 0 :(得分:2)

我建议不要将此视为您必须在您的实体中窃取的内容,而是提供服务(在域驱动的设计用语中),其工作是收集此数据时的工作要求并将其作为一种观点呈现。这使您不必以笨重的方式重新修改实体。

  

问题是,到目前为止,我无法用我的域实体表示整个数据集。

你在这里感受到的尴尬设计摩擦是一件好事。这是一个线索,事情不太合适。

答案 1 :(得分:2)

听起来你已经(通过这种困难的出现)发现你的域名模型存在问题。您希望在每个列表框中显示的抽象显然在您的域模型中没有很好地表示,也没有在您的“无所不在的语言”中表现出来。确定它是什么,命名它,并将代码添加到您的存储库以生成这些对象的列表,无论它们是实体还是值对象......