【问题标题】:Domain Driven Design Approach for a Project Management System C# ASP.NET 3.5项目管理系统 C# ASP.NET 3.5 的领域驱动设计方法
【发布时间】:2012-09-04 11:29:28
【问题描述】:

我正在使用 C# 3.0 和 ASP.NET 3.5 以及 SQL Server 2008 R2 后端编写一个简单的项目管理系统。

目前它本质上是一个数据驱动的应用程序,具有基本的 CRUD 功能、少量的业务逻辑和一些验证。

预计该系统将增长为包含更复杂的业务功能,我有兴趣尝试使用领域驱动设计 (DDD) 的原则对其进行改造。

我意识到这对于系统目前的状态来说是多余的,我预计现在会创建一个贫血的域。

该系统由客户、客户、项目、组件和活动组成。

一个客户有 0,1 个或多个客户。 客户有 0,1 或多个项目 一个项目有 0,1 个或多个组件,并且 一个组件有 0,1 或多个活动。

我将如何使用 DDD 进行建模?我是否将客户、客户、项目、组件和活动作为聚合根,或者我将拥有一个聚合根(客户)并将客户、项目、组件和活动作为可通过客户访问的实体?是否有推荐的方法来建模实体/聚合根之间的多对一关系?

我意识到这并没有涉及值对象(显然客户、客户等包含多个属性)等,但我在这里是一个完整的初学者,并且希望得到一些指针,就像一个接近完整的答案一样。

对于这个问题的开放式性质表示歉意,我已经有了一个工作系统,但正在展望未来。

谢谢, 丰富。

【问题讨论】:

  • 一个好的领域模型由一组相互连接的对象组成,这些对象相互交互以处理业务用例。如果要使用 DDD,首先需要弄清楚用例是什么。您能否添加有关您的项目支持哪些用例的更多信息?
  • 感谢您的回答。我想我会去阅读领域驱动设计。

标签: c# domain-driven-design asp.net-3.5


【解决方案1】:

领域驱动设计的核心不是软件分析,而是业务分析。应用 DDD 的想法和模式可能会让您最终得到根本不称为客户、客户、项目、组件和活动的聚合和实体。

假设一组给定的类/实体并尝试在它们上强制执行 DDD 构建块可能不会让您很快取得任何进展。

对于初学者,我只能推荐(重新)阅读 Eric Evans 的Domain Driven Design一书。不仅是前几章,后面的部分(第三部分 - 重构以深入了解第四部分 - 战略设计)比更具战术性的第二部分重要得多它处理底层的Building Blocks

更新:如果您只想进行建模练习而不进行耗时的分析(这使得 DDD 如此昂贵且仅适用于复杂领域),我建议您阅读Streamlined Object Modelling: Patterns, Rules, and Implementation

【讨论】:

  • 您能否详细说明一下为什么您认为聚合和实体不会被称为客户、客户等?在我看来,这些很可能是领域专家使用的语言的一部分。
  • @DanielHilgarth 这在特定域和不同团队之间会有所不同。肯定没有对错之分。我想说的是,进行适当的业务分析可以发现比“取名词为类,取动词为方法”的旧方法更合适的概念。
  • 感谢您的回答。我想我会去阅读领域驱动设计。
【解决方案2】:

通常我把所有这些类型的元素作为聚合根,你看不到模型的未来增长或变化,如果你需要作为一个独立实体访问活动,例如制作活动报告,按活动类型分组并按月细分,并制作子报告以按客户或客户展开信息,从这一点开始尝试从客户那里制作报告 - 客户 - 活动很难,并且确保您需要添加一些代码来处理回应并报告。

您可以将客户 a 视为根,但不要避免在子实体上引用父级,我认为这是不头痛的最佳做法。

【讨论】:

  • 感谢您的回答。我想我会去阅读领域驱动设计。
猜你喜欢
  • 1970-01-01
  • 2014-09-12
  • 2023-03-19
  • 1970-01-01
  • 2011-03-25
  • 2010-10-06
  • 2020-08-10
  • 2011-09-25
  • 1970-01-01
相关资源
最近更新 更多