2

我对 DDD 相当陌生,并且已经阅读了一些关于这个概念的文章,如果我缺乏一些知识,请原谅。我很好奇这个例子应该如何用聚合根来建模。

基础是:有一个员工,一个会议和评论。每个员工都可以参加他们可以发表评论的会议。根据员工和会议跟踪评论。每个会议和员工都有唯一的标识符。

如果我想显示会议中的所有评论,而不考虑员工,我是否必须首先获取属于该会议的所有员工,然后对评论进行排序以仅显示与会议 ID 匹配的评论?

会议不能成为我的总根,因为当我需要一份员工名单时,我当然不想通过会议来获得它。也许每个都是一个聚合根,但评论在员工之外真的没有意义。我正在寻找有关如何更好地处理这种情况的想法。

// Datebase tables
Meeting
Employee
Comment - Contain EmployeeId and MeetingId


public class Employee
{
    public List<Comment> Comments { get; set; }
}

public class Meeting
{
    public List<Employees> Employees { get; set; } 
}

在此先感谢您的帮助。

4

2 回答 2

1

我可能会将其设计为

public class Comment
{
    public string Message {get;set;}
    public Employee {get;set;}
    public Meeting {get;set;}
}

public class Employee
{
    //public List<Comment> Comments { get; set; } <- why does this matter?
}

public class Meeting
{
    //public List<Employee> Employees { get; set; }  <- why does this matter?
    public List<Comment> Comments { get; set; } 
}
于 2011-09-15T18:59:57.427 回答
1

Employee 和 Meeting 是您的聚合根,您必须为聚合根创建一个存储库。

评论可以是 Meeting 的属性。我认为从 Employee 中检索评论而不与 Meeting 相关是没有用的?当您不知道其“上下文”(==会议)时,我认为评论没有任何意义吗?

通过这样做,您的班级模型将与 Chris Marisic 提出的非常相似。

在这些类旁边,您可以拥有以下存储库:

public class EmployeeRepository
{
    public IList<Employee> GetAll() {}
}

public class MeetingRepository
{
    public IList<Meeting> GetAll(){}

    public IList<Meeting> GetMeetingsAttendedByEmployee( Employee emp ){}
}
于 2011-09-15T19:11:25.093 回答