Полагаю, это вечный вопрос, и у обоих подходов есть свои плюсы и минусы и множество последователей, которые клянутся ими.
Подход repository
, который вы предпочитаете (имея репозиторий / шлюз, как вы его называете) для обработки операций CRUD, делает ваши реальные бизнес-классы меньше и экономнее, поскольку они, вероятно, содержат только данные и, возможно, валидацию / бизнес-правила ,
В этом случае вы выполняете операции CRUD один раз, но, скорее всего, один раз для каждого типа объекта, с которым вы имеете дело.
С другой стороны, подход smart business object
может утверждать, что операции CRUD для данного объекта в любом случае специфичны для этого объекта, поэтому код для выбора, обновления, удаления такого объекта всегда будет специфичным, поэтому может также проживать внутри самого объекта.
В этом случае вы реализуете операции CRUD для каждого класса объектов один раз - я не вижу большого недостатка по сравнению с подходом к хранилищу в этом случае, на самом деле.
Я лично сегодня склоняюсь к подходу к хранилищу, но я также вижу преимущества в подходе «умный бизнес-объект» - оба они верны, и я думаю, вам просто придется либо убедить нового архитектора в своей позиции, или договориться с другим подходом.
Марк