Я новичок в DDD, поэтому я немного попрактикуюсь, чтобы понять немного больше. У меня есть курс BC со следующими правилами:
- Сначала необходимо создать курс, а затем они могут создавать модули одного курса.
- Каждый модуль будет завершен пользователем, когда он загрузит домашнее задание.
- Курс будет завершен пользователем, когда он завершит все модули.
Определение: курс охватывает конкретную тему и состоит из модулей. Например, курс SAP состоит из 10 модулей, таких как: модуль 1: что это такое?, Модуль 2: как его использовать?…
После этого я понимаю, что курс является совокупным корнем модуля, поскольку модули завершены, мне нужно закрыть статус пользователя с курсом.
модель будет:
public class Course : AggregateRoot
{
private string title;
private List<Module> modules;
}
но также модуль является совокупным корнем домашнего задания, потому что, когда пользователь загружает свое домашнее задание, модуль должен быть закрыт. Это заставляет меня думать, что этот подход неправильный, потому что в DDD невозможно иметь вложенный совокупный корень. Кто-то знает в чем дело?
[ОБНОВЛЕНО]
Хорошо, теперь я понимаю, как работает работа и почему вы разделили ее на 2 года до нашей эры. Однако я внес некоторые изменения, и у меня возникли некоторые вопросы.
-Я создал метод регистрации как статический, а конструктор поместил в частный.
-Курс должен быть массивом, потому что у одного ученика может быть больше одного.
-Я поставил больше параметров, связанных с курсом, а также с учителем. Учитель и сущность, конечно, правильно?
-Я создал статус, конечно, чтобы обновить его, когда модуль будет завершен таким образом, мне не нужно читать все модули, чтобы узнать это. нормально?
-Как я могу передать дополнительную информацию для каждого модуля, например заголовок и описание? и как объект курса создает все модули, верно?
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 */
}
}