c# - 帮助在提供商场景中选择我的 DDD 聚合根?

标签 c# asp.net domain-driven-design aggregate design-principles

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

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

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

session 不能成为我的聚合根,因为当我需要员工列表时,我当然不想通过 session 来获得它。也许每个人都是聚合根,但在 Employee 之外,评论实际上没有意义。我正在寻找有关如何更好地处理这种情况的想法。

// 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; } 
}

在此先感谢您的帮助。

最佳答案

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

评论可以是 session 的属性。我认为从员工那里检索与 session 无关的评论是没有用的?当您不知道它的“上下文”(== session )时,我认为评论没有任何意义?

这样做,您的类模型将与 Chris Marisic 提出的非常相似。

除了这些类之外,您还可以拥有以下存储库:

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

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

    public IList<Meeting> GetMeetingsAttendedByEmployee( Employee emp ){}
}

关于c# - 帮助在提供商场景中选择我的 DDD 聚合根?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7435960/

相关文章:

asp.net - Redis 框架的服务堆栈许可证

domain-driven-design - DDD 中两个限界上下文之间的通信

persistence - DDD : Persisting aggregates

c# - 如何在ascx文件中组合两个变量

java - 保存聚合根而不暴露嵌套实体

c# - 如何让基类调用它的虚函数?

c# - 如何在 Windows 10 中获得应用内通知?

c# - 使用 C# 下载文件

c# - .NET Core 可以用于构建 native Linux 二进制文件吗?

asp.net - 从 HttpRequest 获取状态码