我是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; }
}
提前感谢您的帮助。
答案 0 :(得分: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; }
}
答案 1 :(得分:1)
员工和会议是您的聚合根,您必须为聚合根创建存储库。
评论可以是会议的财产。我认为从员工那里检索评论而不与会议相关是没用的?当你不知道它的“背景”(==会议)时,我认为评论没有任何意义吗?
通过这样做,你的班级模型将与Chris Marisic提出的非常相似。
在这些类旁边,您可以拥有以下存储库:
public class EmployeeRepository
{
public IList<Employee> GetAll() {}
}
public class MeetingRepository
{
public IList<Meeting> GetAll(){}
public IList<Meeting> GetMeetingsAttendedByEmployee( Employee emp ){}
}