我如何在 DDD 中为类似模板的实体建模?
How can I model a template-like entity in DDD?
我是 DDD 的初学者,我尝试在下一个场景中用 C# 优雅地建模:
一个基本上只有名称 属性 和必须按特定顺序执行的项目列表的模板。
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; }
}
一个名为 Profile 的类型。
public class Profile
{
public string Name { get; set; }
}
配置文件 class 的目的是说
- 我正在使用模板 A 来了解我拥有的物品以及顺序
- 如果模板 A 发生变化,那么我正在使用新版本,因为我不想保留列表模板 A 的副本。
- 如果我被删除,那么模板不会受到任何影响
- 如果创建了我,那么我需要一个模板
- 我可以只用我的名字来照顾
这看起来聚合根就是模板,它有一个项目列表和一个配置文件列表。但我觉得按配置文件的名称搜索需要我搜索所有具有给定名称的配置文件的模板。不知何故,来自 CRUD 背景,似乎要付出高昂的代价。此外,配置文件是使用模板并让模板知道使用它的配置文件的配置文件,这似乎是错误的。
你如何建模?这里的聚合根应该是什么?是多于一个?如果要从 UI 使用它,如何执行搜索?
Profile
或 Template
都不能嵌套在另一个聚合中,它们需要作为单独的聚合存在。听起来好像 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; }
}
不要。当你需要学习 DDD 时,不要开始元建模和过度抽象。这是一个非常糟糕的主意,因为它会将你的注意力集中在与学习 DDD 无关的事情上,会分散你的注意力,并会导致你做出错误的决定。
你需要从解决具体问题入手。抽象需要来自具体的解决方案。在你实现了(至少三个)它们之后,是时候看看抽象了
我是 DDD 的初学者,我尝试在下一个场景中用 C# 优雅地建模:
一个基本上只有名称 属性 和必须按特定顺序执行的项目列表的模板。
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; } }
一个名为 Profile 的类型。
public class Profile { public string Name { get; set; } }
配置文件 class 的目的是说
- 我正在使用模板 A 来了解我拥有的物品以及顺序
- 如果模板 A 发生变化,那么我正在使用新版本,因为我不想保留列表模板 A 的副本。
- 如果我被删除,那么模板不会受到任何影响
- 如果创建了我,那么我需要一个模板
- 我可以只用我的名字来照顾
这看起来聚合根就是模板,它有一个项目列表和一个配置文件列表。但我觉得按配置文件的名称搜索需要我搜索所有具有给定名称的配置文件的模板。不知何故,来自 CRUD 背景,似乎要付出高昂的代价。此外,配置文件是使用模板并让模板知道使用它的配置文件的配置文件,这似乎是错误的。
你如何建模?这里的聚合根应该是什么?是多于一个?如果要从 UI 使用它,如何执行搜索?
Profile
或 Template
都不能嵌套在另一个聚合中,它们需要作为单独的聚合存在。听起来好像 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; }
}
不要。当你需要学习 DDD 时,不要开始元建模和过度抽象。这是一个非常糟糕的主意,因为它会将你的注意力集中在与学习 DDD 无关的事情上,会分散你的注意力,并会导致你做出错误的决定。
你需要从解决具体问题入手。抽象需要来自具体的解决方案。在你实现了(至少三个)它们之后,是时候看看抽象了