domain-driven-design - 领域驱动设计:如何正确思考和设计聚合根?
问题描述
我正在开发一个学校管理系统作为个人项目,并且我正在通过 DDD 方法进行指导。
我现在有这个结构。
public class Teacher : Value object
{
public Guid ID { get; private set; }
public Charge Role { get; private set; } // Enum
public DateTime ActiveFrom { get; private set; }
// Some logic
}
public class Student : ValueObject
{
public Guid ID { get; private set; }
public string FullName { get; private set; }
// Some logic
}
public class Subject : Entity
{
private List<Teacher> teachers
public string name { get; private set; }
// Some logic like
public void AddTeacher(Guid TeacherID) { ... }
}
public class Course : Entity, IAggregateRoot
{
private List<Subject> subjects;
private List<Student> students;
public void AddSubject(Guid ID) { ... }
public void AddStudent(Guid ID) { ... }
public void AddTeacherToSubject(Guid TeacherID, Guid SubjectID)
{
var subject = subjects.find(SubjectID);
subject.AddTeacher(TeacherID);
}
}
无论进行一些调整,导致我这样做的问题是:
在课程管理的一个聚合根中,我用科目填充我的课程,学生关闭边界上下文但是,将教师添加到科目的逻辑似乎是另一个聚合根(科目聚合根)的一部分,或者它可以是相同的?另一方面,为了管理属于一门课程的不同科目的时间表,我需要访问这个科目列表(示例代码中的那个):我必须重复这个再次添加科目的逻辑,否则会有不同的方法 ?
最后,我不知道我是否错了,但似乎和实体的逻辑,在这种情况下,课程,它被装箱到不同的地方或聚合根或不同的边界上下文。即一个用于管理,另一个用于计划,另一个用于其他操作。科目或学生、教师等也是如此……这是思考 DDD(聚合根、实体等)的正确方式,还是我正在制作一个大意大利面条代码?
解决方案
推荐阅读
- java - 线程“main”java.lang.Error 中的异常:未解决的编译问题:无法解决 LocalConverter
- php - 试图了解什么是命名空间:致命错误:未捕获的错误:在 C:\Users\bird\ 中找不到类 'feline\Cat'
- java - 尝试激活 firebase 后,我的 android 应用程序无法在 android studio 上运行
- django - Django 在更新时增加数据库中的价值
- microsoft-graph-api - 调用 Microsoft Graph API(beta) 获取通话记录?
- css - 如何使我的响应式 WebApp 适应垂直放置的电视屏幕?
- python - DRF:如何在保存到数据库之前更改模型字段的值
- reactjs - 构建一个 React 应用程序
- foreach - 如何在 SwiftUI 的 ForEach 中分配一个变量?
- reactjs - 如何在反应中访问数据数组中的对象