Где я должен создать корень агрегата? В api или во фронтенде?

Где я должен создать корень агрегата? В api или во фронтенде?
Где я должен создать корень агрегата? В api или во фронтенде? - gaberce @ Unsplash

Если вы действительно хотите рассматривать объекты продаж (с включенными изображениями) как совокупность в вашей модели домена, вы не должны разрешать ПОЛУЧАТЬ или РАЗМЕЩАТЬ продажи и изображения по отдельности и использовать свою SaleEntity модель в качестве плана. Цитируя Фаулера:

Агрегаты являются основным элементом переноса хранилища данных — вы запрашиваете загрузку или сохранение целых агрегатов. Транзакции не должны пересекать совокупные границы.

Добавлю, что представления о «правильном пути» или «правильных привычках» кажутся мне неверными. Подход рассматривать продажи и изображения по отдельности (а значит и как сущности/агрегаты сами по себе) не более и не менее правильный - это просто другое дизайнерское решение.

Конечно, одно из двух решений может лучше подойти для создания вашего конкретного приложения. В конечном итоге это зависит от того, что ваша система будет делать с этими сущностями. Если объекты продажи вместе с изображениями всегда можно рассматривать как единое целое (например, в любых операциях загрузки и сохранения или, возможно, в определенных операциях бизнес-логики), используйте модель «SaleEntity с изображениями». Однако, если вы хотите разрешить объекты изображения с пустым sale_id, с операциями над ними вне контекста «продажи», вам лучше реализовать эти два объекта отдельно и предоставить отдельные конечные точки.

Прикрепляю к посту несколько видео по теме:

Прикрепленное видео 1 - Антон Немцев. «Кодстайл и насилие». Фронтенд-лекция в Группе компаний FIX

Прикрепленное видео 2 - Староновогодние беседы

Прикрепленное видео 3 - Разработка под WebAssembly: реальные грабли и примеры, Андрей Нагих (Инетра, Bytefog)


LetsCodeIt, 18 января 2023 г., 04:22