Я много исследовал теорию инъекций зависимостей, и это имеет большое значение, за исключением того, что, по-видимому, в некоторых сценариях возникает сложность/раздувание.PHP Dependncy Injection & Complexity
Во-первых, предполагается, что экземпляр контейнера DI никогда не передается ни одному объекту. Плохая практика и все такое ...
Например: рассмотрите класс «пользователь», который относится ко всем другим бизнес-объектам, созданным в системе, для/для определенного пользователя.
Если экземпляр пользователя должен быть удален, все связанные объекты (например, записи, файлы, изображения и т. Д.) Также необходимо удалить. Означает ли это, что экземпляр каждой зависимости должен быть введен в пользовательский экземпляр, чтобы разрешить поиск и удаление всех связанных объектов? то есть экземпляр ImageMapper (или ImageMapperFactory) должен быть передан, чтобы удалить все изображения, созданные/загруженные удаляемым пользователем экземпляром пользователя?
Если нет, является ли такой сценарий хорошим примером того, где должен использоваться локатор службы?
Я нахожу его повторяющимся снова и снова в статьях & учебников, которые программист должен избегать использования «нового» в любом классе, таком как чума. Однако действительно ли это возможно для экземпляров контроллеров, которым может потребоваться создать множество представлений или тому подобное?
Будет рассмотрен конкретный пример соблюдения SOLID-мантры, по крайней мере, в отношении DI ... Тот, который дает понять, как можно либо заполнить экземпляры ВСЕХ требуемых зависимостей в классе контроллера, либо как будут ли найдены или созданы лучшие экземпляры таких зависимостей?
siebz0r, вы подтвердили вывод, к которому я медленно приступал, продолжая исследования по проблеме. Особенно уровень сервиса :) Я скептически относился к концепции уровня обслуживания, потому что я был убежден, что это противоречило правилу дяди Боба «без глаголов в классе/объектах». продолжение ... – Nibbl3r
Однако теперь ясно, что уровень обслуживания/аспект имеет определенное место в структуре MVC, посредством чего модель представляет объекты данных домена, только «осознавая» себя (то есть S в SOLID) и обрабатывая дескрипторы уровня обслуживания бизнес-логика, которая, в свою очередь, имеет смысл «тонких контроллеров и моделей жира», если логически мыслить. «Толстая» модель предназначена для указания/поддержки принципа единой ответственности imho и распространяется на идею о том, что вы не должны просто забивать автобус. логика от контроллера в модель, а скорее отдельные проблемы, так что сервисный уровень имеет смысл. – Nibbl3r
Я все еще размышляю о соответствующей/применимости шаблона репозитория, когда присутствуют данные. Репозиторий просто чувствует себя немного странно, особенно учитывая, что вы часто занимаетесь извлечением и представлением нескольких экземпляров объектов домена, но чаще всего работаете (например, редактируете/обновляете) только на одном экземпляре за раз, что делает такие карты данных такими хорошая посадка. – Nibbl3r