Почему я разделяю корпоративную систему на модули
Когда корпоративная система начинает расти, довольно легко попасть в ловушку и постепенно превратить её в одно огромное приложение, где всё связано со всем. Сначала это даже удобно. Один проект, одна точка входа, всё рядом. Но чем больше появляется функций, тем сложнее становится понимать, где заканчивается одна область ответственности и начинается другая. Поэтому при развитии платформы я стараюсь разделять её на отдельные модули. Диспетчерская решает свои задачи, биллинг свои, документооборот свои. При этом для пользователя всё это остаётся одной системой с общей авторизацией, интерфейсом и правилами доступа. Мне нравится такой подход по простой причине: каждый модуль можно развивать отдельно, не превращая изменения в одном разделе в лотерею для всей системы. Если завтра нужно серьёзно переработать аналитику, это не должно означать, что придётся трогать диспетчерскую или документооборот. При этом модули не должны превращаться в набор полностью независимых программ. Иначе вместо одной большой проблемы получится восемь маленьких. Поэтому общие вещи вроде пользователей, прав доступа, уведомлений и других базовых функций логичнее держать на уровне самой платформы, а внутри модулей оставлять только то, что относится непосредственно к их задачам. В результате получается довольно понятная модель: есть ядро системы и есть отдельные рабочие области вокруг него. Наверное, самое сложное здесь даже не написать код. Сложнее определить границу, где заканчивается общая функция платформы и начинается ответственность конкретного модуля. И именно эта граница потом определяет, насколько спокойно система сможет расти дальше.