关于继承的领域模型问题

Sam*_*l G 2 c# domain-driven-design

我需要一些关于建模以下电影领域的建议.我有一个人实体.这个人可以是演员,导演,制片人和作家,而且往往都是.我不想在每个实体中复制数据,因此最好创建一个名为Person的抽象基类,每个Director,Actor和Writer类都继承自该类.当我看下面的测试时,这已经开始闻到了:

[Test] public void Can_Do_It()
{
   var actor = new Actor("Clint Eastwood");  
   var director = //?? Can new it up as he already exists as actor  }
Run Code Online (Sandbox Code Playgroud)

是否更有可能拥有一个Person Class,然后像Writer这样的类接受一个人的实例,即

public class Writer(Person person,string attribute1,string attrribute2){...}

Hen*_*man 10

一个常见的解决方案是引入"角色"的概念(在这种情况下非常合适).一个人可以是0+电影中的演员,和/或填写导演角色.

这也允许您为角色添加属性,如字符名称,日期等


编辑:

Role类与Person和Movie都有双向关联.

class Role
{
     public Person Contributor { ... } 
     public Movie  Feature { ... }
     public RoleType Activity { ... }
}  

class Person
{
    public List<Role> Contributions { ... }
}        

class Movie
{
    public List<Role> Contributors { ... }
    ...
}
Run Code Online (Sandbox Code Playgroud)