Вот в том и проблема. Бизнес-логика редко ложится на CRUD. Если бы ложилась, никаких бы проблем с банальным AR не возникало, можно было бы, как в упомянутом мной в соседней теме StrongLoop, писать все приложение декларативным json-конфигом. Но обычно все сложнее. А как только логику, затрагивающую одну сущность, размыли по куче сервисов - становится все сложнее поддерживать состояние сущности в консистентном состоянии, приходится помнить, что все эти сервисы делают, как и почему.Но это же совершенно другая проблема, которая никак не связана с темой. Хитрость надо выносить. Если действие выходит из CRUD - нужно уходить наверх.
Оу, я на этой идее даже целый фреймворк писал. Не, будет ад, будет, просто поверь мне, пока не поздно! =)Конечно, в класс помещается только CRUD или только одна логическая операция. Сущность - отдельно, коллекция - отдельно. Таких разных маленьких классов у меня бывало несколько сотен, и никакого ада.
Это некорректный вопрос, так как мы не делаем инъекции в сущность с помощью DIC.В чем разница с инъекциями снаружи?
Точно такой же magic - по конфигу выставляются поля через сеттеры. Вызов сеттеров? Это деталь реализации, можно сделать вызов сеттеров, если они есть в классе.
Конечно, инъекция делается специальным объектом по конфигу, и он берет сервисы из контейнера. Это не меняет суть вопроса - в чем разница, если инъекцию выполняет трейт?Это некорректный вопрос, так как мы не делаем инъекции в сущность с помощью DIC.
Разница в том, что ты возлагаешь на объект, пусть и посредством трейта для уменьшения копипасты, обязанность разрешения собственных зависимостей.Конечно, инъекция делается специальным объектом по конфигу, и он берет сервисы из контейнера. Это не меняет суть вопроса - в чем разница, если инъекцию выполняет трейт?