【发布时间】:2018-07-21 21:48:40
【问题描述】:
我想在我的 .NET Core 域模型中实现 DDD 模式。 这是具有聚合子实体和聚合孙实体的聚合根的示例:
public class Supplier
: Entity, IAggregateRoot
{
private string _name;
private readonly List<Catalog> _catalogs;
public IReadOnlyCollection<Catalog> Catalogs => _catalogs;
protected Supplier() { _catalogs = new List<Catalog>(); }
public Supplier(string name)
{
_catalogs = new List<Catalog>();
_name = name;
}
public void AddCatalog(string name)
{
var catalog = new Catalog(name);
_catalogs.Add(catalog);
}
public void AddCatalogItem(int catalogId, string name)
{
var catalogItem = new CatalogItem(name);
_catalogs.Single(c => c.Id == catalogId).AddCatalogItem(catalogItem);
}
}
这里是聚合子的代码:
public class Catalog
: Entity
{
private string _name;
private readonly List<CatalogItem> _catalogItems;
public IReadOnlyCollection<CatalogItem> CatalogItems => _catalogItems;
protected Catalog() { _catalogItems = new List<CatalogItem>(); }
public Catalog(string name)
{
_catalogItems = new List<CatalogItem>();
_name = name;
}
public void AddCatalogItem(CatalogItem catalogItem)
{
_catalogItems.Add(catalogItem);
}
}
还有总孙:
public class CatalogItem
: Entity
{
private string _name;
protected CatalogItem() { }
public CatalogItem(string name)
{
_name = name;
}
}
这是实现 DDD 模式的正确方法吗?
或者这是否违反了我不知道的 DDD 规则?
【问题讨论】:
-
本身没有“DDD 模式”。 DDD 有一系列模式可供您选择使用。事实上,您的代码无法满足 DDD 的基本要求:丰富的域模型 - 您的实体没有行为或域逻辑,也没有强制执行不变量。
标签: c# .net .net-core domain-driven-design domain-model