Правильно ли иметь агрегат с полями, отличными от объекта базы данных?

Я пытаюсь применить DDD, и у меня есть некоторые сомнения. Я читаю книгу Scott Millet DDD и только что прочитал главы Aggregates.

Представьте себе простую модель предметной области, подобную этой:

class Candidate
val id: CandidateId
val name:Name
val musicStylesPreferences: List<MusicStyle>
val sportPreferences: List<Sport>
val smoking: Boolean
enum MusicStylePreference
ROCK, METAL, POP, HIPHOP

Остальные объекты такие.

Если мы подумаем о сохранении Candidate, мой подход будет таким:

*DatabaseObject*
CandidateVO
val id: String
val name: String


MusicStylePreferenceVO
val candidateId: String
val StyleName: String

Когда я сохраняю объект Candidate в базе данных, я сохраняюсь в соответствующей таблице, а когда я увлажняю агрегат, я буду запрашивать таблицы.

Я не уверен, что этот подход правильный, я также думаю, что, возможно, такие объекты, как MusicStylePreference, Smoking и т. д. ... не должны быть согласованными и транзакционными (некоторые из преимуществ агрегатов) и могут быть вне совокупность Candidate.

Что вы думаете?

Я ценю любой ответ. Спасибо :)


person Arturo    schedule 20.08.2020    source источник


Ответы (1)


Это правильно и даже необходимо. Aggregate должен моделировать вездесущий язык, в то время как имена полей базы данных касаются постоянства и имеют другие отдельные цели и требования.

Надуманный пример; База данных может сохранить полное имя как Имя, Фамилия, но агрегат имеет только строку. Полное имя, которое представляет собой конкатенацию значений. Неважно, как они сохраняются или даже где.

person Louis    schedule 21.08.2020
comment
Полностью согласен, кроме приведенного примера. Если агрегат имеет только свойство fullname, он не может быть сохранен в двух разных полях в базе данных, поскольку нет возможности получить имя и фамилию из агрегата. - person Mohamed Bouallegue; 21.08.2020
comment
Есть. Вы разделяете полное имя при сериализации. Цель этого надуманного примера — показать, что некоторые домены будут преобразовывать сериализованные данные в соответствии с их вездесущим языком. - person Louis; 21.08.2020
comment
Большое спасибо @Louis и Mohamed, у меня есть некоторые сомнения, но вы подтвердили, что я был прав. Я прочитаю главу еще раз, чтобы подтвердить знания. С Уважением! - person Arturo; 21.08.2020