Агрегировать или не агрегировать - PullRequest
0 голосов
/ 22 марта 2020

У меня есть User модель, которая aggregate. Я также планирую создать WorkingHours объект. Это как у каждого user будет свой рабочий день в день. Также будет graphical user interface отделено от User в течение add/remove/update часов и т.д. c. Я думаю, должен ли я поместить все операции в UserRepository, относящиеся к WorkingHours, или я должен сделать шаг WorkingHours model как aggregate и создать отдельный WorkingHoursRepository, чтобы я мог поместить property в User как id до WorkingHours объект. Какой вариант мне выбрать?

Я думаю, что не делать WorkingHours совокупным, потому что каждый набор рабочих часов относится к определенным c user, что делает его, если я считаю правильным, зависимым от User и не могу жить без Это. Моя единственная мысль о том, чтобы сделать его агрегированным и создать отдельный репозиторий, связана с тем, что иметь более чистый код означает не помещать все CRUD et c в один и тот же repository, но я полагаю, что это не то, чтобы отделять его, поэтому для меня единственный способ - WorkingHours как value object, а не aggregate и использовать UserRepository для него.

1 Ответ

0 голосов
/ 23 марта 2020

Вы разрабатываете свою модель предметной области на основе ваших бизнес-требований, а не на том, как ее нужно сохранить.

В этом сценарии, если Working Hours можно манипулировать только в пределах домена User и если вы думаете, что User является единственной требуемой совокупностью, то Working Hours не следует делать совокупной. Тем не менее, это не мешает вам сохранять ваши данные в чистом виде в вашем хранилище данных. Стратегия хранения ваших данных также во многом зависит от вашего типа хранилища данных.

Например, если вы используете SQL и ваши данные хранятся в нескольких таблицах, вы можете Commit или Rollback вся транзакция. Как вы реализуете, это не привязано к DDD, если вы придерживаетесь концепции, что агрегаты должны обновляться только через сущность root.

Если вы используете No- SQL базу данных, такую ​​как Cosmos DB, вы можете загрузить или сохранить весь документ. В этом случае вы будете иметь дело только с хранилищем User.

Надеюсь, это поможет.

...