Как в модульной системе грамотно делаются зависимости? Прочитал я один блог, который жевал проблему современных фреймворков - дескать это громоздские конструкции с огромной кучей кода, который мало кому нужен. И вот жевал этот автор жевал эту тему и в конце дал решение - делайте модульную структуру вашего приложения. Кусочки, дескать, имеют собственные виды, модели и контроллеры и собираются воедино (наверное он имел в виду шину (в народе - массив, для олд-скула - одномерная матрица) событий или инструкций).
И вот как в этом случае последний слон ООП реализуется?
Скажем есть у меня модуль Messages - задача его хранить все методы сообщений об ошибках, колекционировать их, вести логи, а если задуматься - то даже делать трассировку.
Есть модуль Роутер - который разбивает строку адреса на куски и определяет - язык это значит, параметры товара, или кусок урла отвечающий за страницу.
И вот Роутер имеет ошибки, то есть он ЗАВИСИТ от модуля Messages.
Как же грамотно (чтобы без гемора в будущем) сделать такие зависимости?
В самой шине? В главном модуле? Или все зависимости подключаются прямо в файле модуля Роутера? А если через одну зависимости? К примеру есть модуль языков еще. И роутеру требуются ошибки, а ошибкам - языки. А языкам кстати говоря тоже ошибки требуются, для ведения логов, каких фраз нету.
И как тут сделать зависимости, чтобы они еще и подряд загрузились, как полагается? И без дублей.

21 Авг 2019 в 07:05
169 +1
0
Ответы
1

В модульной системе зависимости лучше всего делать через внедрение зависимостей (dependency injection). Это позволяет сделать код более гибким, уменьшить связанность между модулями и легче тестировать отдельные компоненты.

В вашем случае, модуль Роутер зависит от модуля Messages. Вы можете создать интерфейс для модуля Messages, который будет реализовывать сам модуль, и передавать этот интерфейс в конструктор Роутера. Таким образом, Роутер будет иметь доступ к методам сообщений об ошибках без прямой зависимости от конкретной реализации модуля Messages.

Если у модуля Роутер также есть зависимость от модуля Языков, можно поступить так же - создать интерфейс для модуля Языков и передавать его в конструктор Роутера.

Чтобы все зависимости корректно загрузились и не было дублирования, можно использовать контейнеры внедрения зависимостей, такие как DI-контейнеры. Они позволяют автоматически управлять зависимостями и предоставляют механизмы для их загрузки и конфигурации.

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

20 Апр 2024 в 13:07
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 96 340 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир