Да, можно разложить конфиги по разным файликам для каждого модуля в таком виде
в реадме конфига есть доки под модуль?
Эксепшены не будут на одинаковые ключи в файлах? Например мне для каждого модуля нужен свой ViewRenderer с разными путями до views и layout?
Будут. Это модульный контейнер под такое нужен, а этого пока нет.
Вот чтобы не приходилось следить) Минус ответственность на ревью.
Тут надо смотреть на реализацию 🙂 На сколько эта доп. сложность будет стоить этого
В моем понимании модули должны быть по возможности изолированы и взаимодействовать друг с другом только через карту контекстов(ANTICORRUPTION LAYER, SHARED KERNEL и тд.) В некоторых случаях полной изоляции добиться будет сложно, как в реализации, так и в соображениях производительности. Если классу одного модуля необходим доступ к классу другого, главное чтоб класс был собран с конфигами своего модуля. В модулях можно создать классы, которые будут служить точкой входа(api) для других модулей, это может быть класс UseCase(Service). Контейнер можно настроить чтоб давал доступ только через такое api к модулю, или же все же оставить на усмотрение разработчику. Я пока думал над настройкой модуля, о проблемах взаимодействия между модулями пока не задумывался.
Это ты, конечно, правильно говоришь. Но так сильно изоляцией я заморачиваться не планировал, только разделить на модули и предоставлять/закрывать доступ из одних модулей к другим. Конечно, на new ClassName() это не повлияет, только на внедрение зависимостей :) А вот делить внутри модуля на слои и давать доступ только к одному из них... Подумать можно, но на первый взгляд это усложнит код контейнера слишком сильно, получаемый профит того не стоит. А насчет настройки - я хочу сделать как оно сейчас в yiisoft/config, только не одним блоком задавать настройки, а в несколько блоков, помодульно. Конфиги же при этом будут храниться в папке внутри модуля. Сейчас пришлю пример того, как я это вижу, вчера составлял.
Для отслеживания того, чтобы модули не использовали чужие классы можно использовать утилиту Deptrac
Не очень понял насчет изоляции контейнером. Имеешь ввиду для модуля собрать конфиги из своих конфигов модуля, конфигов другого или нескольких модулей и конфигов всего приложения?
Я имею ввиду, что если у тебя есть структура модулей как в примере выше, то модуль cart не должен использовать классы, обявленные в customer или app. И поскольку контейнер знает иерархию эту, то он и не даст эти классы.
Обсуждают сегодня