0

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

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

    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; }
    }
    
  2. 一种称为 Profile 的类型。

    public class Profile
    {
        public string Name { get; set; }
    }
    

profile 类的意思是说

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

这看起来像聚合根是模板,它有一个项目列表和一个配置文件列表。但是我觉得按配置文件的名称搜索要求我搜索所有具有给定名称的配置文件的模板。不知何故,来自 CRUD 背景,似乎要付出高昂的代价。此外,配置文件是使用模板的配置文件,并且让模板知道使用它的配置文件,这似乎是错误的。

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

4

2 回答 2

4

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

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

于 2015-07-31T11:36:18.003 回答
2

既不能嵌套ProfileTemplate不能嵌套在另一个聚合中,它们需要作为单独的聚合存在。听起来好像Profile需要保留Template它正在使用的引用。因此,我将通过 id ( Template.Name) 包含对模板的引用。

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; }
}

public class Profile
{
    public string Name { get; set; }

    public string TemplateName { get; set; }
}
于 2015-07-31T09:56:02.597 回答