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

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

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

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

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

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

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

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