【发布时间】:2015-05-17 23:50:33
【问题描述】:
我正在尝试使用领域驱动设计为多对多关系建模。
我的模型中的方案有零个或多个父方案和零个或模式子方案。一对方案之间的关系描述如下:
ParentScheme、ChildScheme、RelationshipRule、RelationshipPriority
我正在考虑使用以下 Scheme 实体对此进行建模:
public class Scheme
{
public int Id {get; set;}
public string SchemeName {get; set;}
public IEnumerable<Scheme> Parents {get; set;}
public IEnumerable<Scheme> Children {get; set;}
}
上述实体的问题在于它没有捕获RelationshipRule 和RelationshipPriority 值。所以我正在考虑创建一个名为 SchemeRelationship 的单独实体
public class SchemeRelationship
{
public int Id {get; set;}
public Scheme Scheme {get; set;}
public Scheme ChildScheme {get; set;}
public string RelationshipRule {get; set;}
public int RelationshipPriority {get; set;}
}
并且还将我的 Scheme 实体更改为:
public class Scheme
{
public int Id {get; set;}
public string SchemeName {get; set;}
public IEnumerable<SchemeRelationship> Parents {get; set;}
public IEnumerable<SchemeRelationship> Children {get; set;}
}
这种方法的问题是,在我的域中,方案关系并不是真正的实体。拥有一个 id 并没有真正的意义。也许将关系建模为值对象更有意义?我对使其成为值对象的唯一保留是值对象应该是不可变的,但在我们的域中,关系优先级可能会因关系而改变。我是领域驱动设计的新手,所以任何关于如何最好地建模的建议都将不胜感激。
【问题讨论】:
标签: java c# oop domain-driven-design