Если вы действительно хотите рассматривать объекты продаж (с включенными изображениями) как совокупность в вашей модели домена, вы не должны разрешать ПОЛУЧАТЬ или РАЗМЕЩАТЬ продажи и изображения по отдельности и использовать свою SaleEntity
модель в качестве плана. Цитируя Фаулера:
Агрегаты являются основным элементом переноса хранилища данных — вы запрашиваете загрузку или сохранение целых агрегатов. Транзакции не должны пересекать совокупные границы.
Добавлю, что представления о «правильном пути» или «правильных привычках» кажутся мне неверными. Подход рассматривать продажи и изображения по отдельности (а значит и как сущности/агрегаты сами по себе) не более и не менее правильный - это просто другое дизайнерское решение.
Конечно, одно из двух решений может лучше подойти для создания вашего конкретного приложения. В конечном итоге это зависит от того, что ваша система будет делать с этими сущностями. Если объекты продажи вместе с изображениями всегда можно рассматривать как единое целое (например, в любых операциях загрузки и сохранения или, возможно, в определенных операциях бизнес-логики), используйте модель «SaleEntity
с изображениями». Однако, если вы хотите разрешить объекты изображения с пустым sale_id
, с операциями над ними вне контекста «продажи», вам лучше реализовать эти два объекта отдельно и предоставить отдельные конечные точки.
Прикрепляю к посту несколько видео по теме: