如何在 DDD 中对类似模板的实体进行建模?

Gra*_*zar 0 c# domain-driven-design aggregateroot aggregates

我是 DDD 的初学者,我尝试用 C# 优雅地建模下一个场景:

  1. 基本上只有一个名称属性和必须按特定顺序执行的项目列表的模板。

    public class Template
    {
        public string Name { get; set; }
        public List<Item> Items { get; set; }
    }
    
    public class Item
    {
        public string Name { get; set; }
        public int Order { get; set; }
    }
    
    Run Code Online (Sandbox Code Playgroud)
  2. 一种称为 Profile 的类型。

    public class Profile
    {
        public string Name { get; set; }
    }
    
    Run Code Online (Sandbox Code Playgroud)

profile 类的意思是

  • 我使用模板 A 来了解我拥有哪些项目以及顺序
  • 如果模板 A 发生更改,那么我将使用新版本,因为我不想保留模板 A 所具有的列表的克隆。
  • 如果我被删除,那么模板不会受到任何影响
  • 如果我被创建,那么我需要一个模板
  • 只能用我的名字来照顾我

这看起来像是聚合根是模板,其中包含项目列表和配置文件列表。但我觉得按配置文件名称搜索需要我搜索具有给定名称的配置文件的所有模板。不知何故,对于具有 CRUD 背景的人来说,这似乎要付出高昂的代价。此外,配置文件是使用模板的配置文件,并且让模板了解使用它的配置文件似乎是错误的。

你如何建模?这里的聚合根应该是什么?是不止一个吗?如果您想从 UI 中使用搜索,如何执行搜索?

Ste*_*ont 5

不。当你需要学习 DDD 时,不要开始元建模和过度抽象。这是一个非常糟糕的主意,因为它会将你的注意力集中在与学习 DDD 无关的事情上,会分散你的注意力,并会导致你做出错误的决定。

你需要从解决具体问题开始。抽象需要来自具体的解决方案。在实现(至少三个)它们之后,是时候看看抽象了