dmitriylanets
@dmitriylanets
веб-разработчик

Что делать если зависимостей у класса становится очень много?

Использую анемичную модель при разработки, соответственно активно используется Service, Repository и инфраструктурные зависимости Request, Configs, FormBuilders, Logger и тд в конструкторах.
Что делать если зависимостей идущих через конструктор становится очень много больше 5 и местами 10 ?

п.с Благо сборкой и инъекцией зависимостей занимается Autowaring DI, но все же.
  • Вопрос задан
  • 1580 просмотров
Решения вопроса 1
miraage
@miraage
Старый прогер
Шаблон фасад (англ. Facade) — структурный шаблон проектирования, позволяющий скрыть сложность системы путём сведения всех возможных внешних вызовов к одному объекту, делегирующему их соответствующим объектам системы.
Ответ написан
Пригласить эксперта
Ответы на вопрос 5
@bkosun
А у вашего класса на самом деле есть жесткая зависимость? Если некоторые из зависимостей являются необязательными, возможно нужно подумать о том, чтобы удалить их из конструктора и использовать сеттеры?

Соблюдается ли принцип единой ответственности?
https://ru.wikipedia.org/wiki/%D0%9F%D1%80%D0%B8%D...
https://en.wikipedia.org/wiki/Single_responsibilit...
Ответ написан
Комментировать
SilenceOfWinter
@SilenceOfWinter Куратор тега PHP
та еще зажигалка...
1. Задуматься почему так получилось и по возможности разграничить.
2. Не забывать что эстетика это конечно хорошо, но клиенту важнее производительность - отцы как бэ открытым текстом говорят - хочешь бложик, так не выеживайся - слепи по быстрому, а если что рефакторинг уже изобрели.
Ответ написан
Indermove
@Indermove
C#/.NET back-end разработчик
Возможно глупый совет, но мне помогает обычно следующее.

Если у меня есть, к примеру Repository и Service и у меня ответ из репозитория обрабатывается методами сервиса, при этом сервис больше нигде не используется, то
1) Создаю новый интерфейс. Например FiltrationDataServiceInterface и передаю его в раздувшийся конструктор вместо этих двух классов.
2) В реализации интерфейса уже использую их для какого-то одного метода.
3) Этот метод использую в изначальном классе, зависимости, которого я хотел уменьшить.

Так можно объединять несколько сервисов в один и уменьшать количество зависимостей у раздувшегося класса.

Логгер я бы за зависимость не считал, так как он вполне самодостаточен и в сущности не является частью вашей логики. То есть если у меня 4-5 зависимостей, и при этом одна из них логгер, то это не сильно страшно. Но тут, конечно тема для холивара может развернуться, поэтому, это просто мое мнение.
Ответ написан
Комментировать
@Vilintritenmert
Впечетление что у класа за много ответственостей... нарушение Single Of Responsibility
Ответ написан
Комментировать
@makeey
Советую почитать книгу. А так же как уже было сказано почитать про SOLID. По поводу "эстетики" не согласен, потому как в дальнейшем будет сложна поддержка кода.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы