Как правильно разбить проект на модули? И как правильно организовать связь между ними?

Здравствуйте!
Я никак не могу понять как правильно делать сайт на основе слабосвязанных модулей и поэтому решил попробовать через практику на тестовом проекте. Буду признателен за любой совет.
Допустим есть сайт электронная библиотека. Там есть книги, категория книг, авторы, пользователи и комментарии пользователей.
  1. Правильно ли будет вынести все что связано с книгами (книги, категории, авторы) в один модуль (library) или лучше вынести всё в отдельные модули?
  2. Как лучше организовать связь между модулями? Например как правильно вывести форму добавление комментариев из view модуля comment в view модуля book? Или например как из модуля comment получить модель из модуля user чтобы получить имя автора коммента?
  • Вопрос задан
  • 2385 просмотров
Пригласить эксперта
Ответы на вопрос 2
slo_nik
@slo_nik Куратор тега Yii
Добрый день.
раз
два
Это для начала, остальное в других статьях блога.

p.s.
Организация переносимых модулей
Связи независимых модулей
Ответ написан
Вопрос очень важный и сложный. На разбиение проекта на модули могут влиять и процессы в моделируемом бизнесе, и организационная структура команды разработки (см "Закон Конвея"). И если второе можно (потенциально) изменить по потребностям, то первое нужно как минимум выяснить. Возможности внесения изменений в бизнес-процессы ограничены, как правило, но в любом случае нужно понять фактическое состояние предметной области.

В последние годы получила развитие методика Event Storming. На эту тему уже есть много видео и даже книжка [наполовину] (https://leanpub.com/introducing_eventstorming). Ключевая идея в том, чтобы выяснить, что должно произойти до того, как мы попадём в то или иное известное состояние. Методика представляет особенный интерес в контексте микросервисов. Предложение oxidmod также имеет к этому непосредственное отношение.

Но кроме системного уровня, нужно также разбивать на модули отдельные компоненты, чтобы можно было их помещать в голове, тестировать и развивать независимо друг от друга. Здесь Вам поможет Гексагональная архитектура (которая также называется "Порты и адаптеры"). Эта концепция поможет разделить компонент на части, реализующие бизнес-функции и (по отдельности) внешние взаимодействия: с файловой системой, с БД, с HTTP клиентами-сервисами и др.

На ещё более низком уровне советую освоить 1) отделение чистых функций от эффектов и 2) функциональную композицию - это идеи из функционального программирования. Не знаю, как с ФП в PHP, но тут практикующие программисты PHP могут подсказать.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы