我试图使用域驱动设计来模拟多对多关系。
我的模型中的方案具有零个或多个父方案以及零或模式子方案。一对方案之间的关系描述如下:
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对它来说真的没有意义。也许将关系建模为价值对象会更有意义吗?我对使它成为一个值对象的唯一保留是值对象应该是不可变的,但在我们的域中,RelationshipPriority可能会改变一个关系。我是域名驱动设计的新手,所以对于如何最好地建模这一点的任何建议都会受到赞赏。
答案 0 :(得分:0)
如果父母和孩子的架构之间存在多对多关系,则以下设计可能对您的方法有用
class Schema
{
public int Id { get; set; }
public string SchemeName { get; set; }
public string RelationshipRule { get; set; }
public int RelationshipPriority { get; set; }
}
class ParentSchema : Schema
{
public IEnumerable<ChildSchema> Children { get; set; }
}
class ChildSchema : Schema
{
public IEnumerable<ParentSchema> Parents { get; set; }
}
- SJ