Я новичок в DDD, поэтому я немного потренировался.У меня есть курс BC со следующими правилами:
- Сначала необходимо создать курс, а затем они могут создавать модули одного курса
- Каждый модуль будет закончен пользователем, когда онзагрузить домашнее задание
- Курс будет закончен пользователем, когда он закончит все модули
Определение: курс охватывает определенную тему и состоит из модуля.Например, в курсе sap есть 10 модулей, таких как: модуль 1: что это такое, модуль 2: как его использовать?…
После этого я понимаю, что курс является совокупным корнем модуля, посколькумодули закончены, я должен закрыть статус пользователя с курсом.
модель будет выглядеть так:
public class Course : AggregateRoot
{
private string title;
private List<Module> modules;
}
, но также модуль является совокупным корнем домашней работы, потому что когда пользователь загружает свою домашнюю работу, модуль должен быть закрыт.Это заставляет меня думать, что этот подход неправильный, потому что невозможно в DDD иметь вложенный агрегатный корень.Кто-то знает, что это не так?
[ОБНОВЛЕНО]
Хорошо, теперь я понимаю, как работает и почему вы разделили ее на 2 BC.Однако я сделал некоторые изменения, и некоторые вопросы приходят мне на ум.
-Я создал метод enroll как статический, и я поместил конструктор как private.
-Course должен быть массивом, потому чтоу одного ученика может быть больше одного.
- Я добавил больше параметров, связанных с курсом, а также с учителем.Конечно, учитель и сущность, верно?
-Я создал статус курса, чтобы обновлять его, когда модуль закончен таким образом, мне не нужно читать все модули, чтобы узнать его.все в порядке?
-Как я могу передать больше информации для каждого модуля, как заголовок и описание?и сущность курса, как создать все модули, верно?
public class StudentEnrolment: AggregateRoot
{
private StudentId studentId;
private Course courses;
private constructor(
StudentId studentId,
Course course,
){
this.studentId= studentId;
this.courses[] = course;
}
public statuc function enroll(
StudentId studentId,
CourseId courseId,
string courseTitle,
string courseLink,
string teacherId,
string teacherName,
List<Tuple<ModuleId, string>> modules) {
teacher = new Teacher(...);
courseStatus = new courseStatus();
new course(courseTitle, courseLink, courseStatus, teacher);
return new self(studentId, course);
}
public function void uploadModuleHomework(ModuleId moduleId, Homework homework){
/* forward to course.uploadModuleHomework */
}
public boolean isCourseFinished(){
/* forward to course.isFinished */
}
public List<Tuple<ModuleId, string>> getModules(){
/* forward to course.getModules */
}
}