c# - 领域驱动设计 : How to Retrieve Lists of Complex Data

标签 c# oop domain-driven-design

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

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

在我的域中,我有评估(一组要回答的问题)和对这些评估的响应(每个用户对评估提供的答案)。我也有行动。每个 Action 代表已采取的带有响应(提交、批准、拒绝等)的 Action 。我也有用户。

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

问题是,到目前为止,我还没有任何方法可以用我的领域实体来表示整个数据集。我的第一 react 是只从数据库中检索数据表并绕过我的域实体。但我发现使用领域对象并将不同实体之间的关系融入到对象本身中有很多值(value)。所以我的下一个想法是修改我的域实体以支持这些列表,但我担心我会向我的实体添加奇怪的属性只是为了支持这些列表场景,而且我可能会通过本质上进行深度加载来损害性能当我只需要在我的应用程序中的几个地方使用该数据时。

最佳答案

我建议不要将此视为您必须硬塞进实体的东西,而是提供一个服务(用领域驱动设计的说法),它的工作是在以下情况下收集此数据请求并将其作为 View 呈现。这使您不必以笨拙的方式重新处理您的实体。

The problem is that as of right now I don't have any way to represent this entire data set with my domain entities.

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

关于c# - 领域驱动设计 : How to Retrieve Lists of Complex Data,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1341394/

相关文章:

c# - naudio 从麦克风录制声音然后保存

c# - 如何在 C# 中将 HTML 转换为 MarkDown?

PHP 类析构函数中的 mysql_query(无法建立到服务器的链接)

oop - 在 OOP 编程风格中,为什么我们要隐藏对象的数据成员以防止其他人直接访问

c# - 关于我们在具有多个客户端的分布式应用程序中进行验证的方法的思考

c# - Windows 窗体 : How to extend a button?

c# - 从数据库中检索数据

c++ - 将 holder 类与 reader 分开

asp.net - 涵盖 .NET 中的 TDD、DDD 和设计模式的书籍

domain-driven-design - 状态模式和领域驱动设计