【问题标题】:Modelling a many-to-many relationship using Domain Driven Design使用领域驱动设计对多对多关系建模
【发布时间】: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


    【解决方案1】:

    如果父母和孩子模式之间存在多对多关系,那么下面的设计可能对您的方法有用

    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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-26
      • 2012-05-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多