Я не эксперт, поэтому отнеситесь к этому ответу с недоверием
Но для CourseSession нет атрибута intrinsi c id, мы должны использовать конкатенацию (courseId + studentId) как entity_id, что не совсем естественно
Наличие составного идентификатора является нормальным, а иногда рекомендуется, чтобы ваша модель предметной области была согласована с языком предметной области.
Составной идентификатор можно смоделировать как объект значения: CourseSessionId { CoursId: string, studentId: string }.
в В дополнение к этому идентификатору домена c, вам может потребоваться добавить суррогатный идентификатор к объекту, чтобы удовлетворить некоторые внутренние требования:
- Некоторые ORM требуют наличия числового c идентификатор последовательности
- Некоторым хранилищам ключей и значений требуется ключ ULID
- Краткий и удобный для пользователя идентификатор
Суррогатный идентификатор является дополнительной информацией и должен быть максимально скрытым от уровня домена.
Есть ли лучший способ смоделировать такие отношения?
Шаблон источника событий, который я видел в контексте DDD, предполагает наличие потока событий для каждого агрегата.
В DDD, агрегат может рассматриваться как:
- Подсистема в ограниченном контексте
- У нее есть границы и инварианты для защиты его состояние
- Оно представлено сущностью (агрегат root) и может содержать другие сущности и объекты-значения.
Если учесть, что CourseSession сущность принадлежит к совокупному курсу , тогда вы должны продолжать использовать идентификатор курса как entity_id
(или aggregate_id
) как для событий, связанных с Course, так и для CourseSession.
в этом случае модель записи ( main model) может легко построить и представить отношения Course / CourseSessions, проигрывая поток Course.
В противном случае вы должны ввести модель чтения и определить проектор , который будет подписываться на оба * 1 056 * Course и CourseSession и создайте необходимые представления.
Эту модель чтения можно запросить напрямую или с помощью Course и CourseSession объединяет команды для принятия решений, но имейте в виду, что часто в конечном итоге согласовывается , и ваш бизнес должен терпеть это.