Хочу создать функциональное приложение полностью состоящее из модулей. Модульная структура вот такая: default(модуль по умолчанию(Главная страница)), admin, user, article, news, comment. Думаю для начал хватит.
Оправдываю это тем, что при дальнейшей эксплуатации приложения в различных проектах, нужно будет просто модифицировать имеющиеся модули, и что то отключить, что то включить.
На сколько, такая структура приложения оправдана, по вашему мнению?
IMHO модуль должен быть неизменным и обособленным. Иметь свой отдельный репозиторий. И что бы не было ситуаций, когда он "меняется от проекта к проекту". Если начиналось все из одного модуля, но потом в каждом проекте он по своему был изменен, то чем он тогда отличается от обычных контроллеров? Изменение в одном проекте должно приводить к возможность обновить его и в других.
К примеру я использую модуль в который поместил механизм логина, регистрации и просмотра списка пользователей. Это позволяет быстро добавить в проект данный функционал, но затруднения возникают когда в разных проектах различный набор полей у юзеров…
К тому же когда модуль в разработке, лично для меня оказывается затруднительным листать в IDE папки из /models в /modules/<name>/models и обратно.
Так что размещать все по модулям, мне не кажется хорошей идеей.
Если количество полей можно регулировать через настройки, и следовательно модуль из одного проекта можно вытянуть в другой без изменений, потому что благодаря настройкам в каждом из проектов он будет работать как нужно проекту, это хорошо и так надо.
А если ты хардкодом пропишешь в модуле одного проекта одни поля, в другом другие, то модуль вростает в проект его оттуда больше не выковыряешь. Вместо "повторного использования кода" мы получаем "дублирование кода", которое плохо уже тем, что и ошибки, найденные в модуле и исправленные в одном проекте, необходимо исправлять и в другом. Это только с виду будет отдельный модуль, на самом деле просто монолитная часть своего проекта. Зачем тогда выносить её в модуль? Она прекрасно и в основном приложении будет жить.