Архитектура приложения. Как сделать независимые модули (сервисы)?

Сейчас переписываю сайт на yii1.1 и столкнулся со следующей проблемой: Необходимо полностью переписать модуль либо внести какие-либо изменения. Но видя дизайн и то чего хочет от меня заказчик понимаю, что модуль нужно полностью переписывать (или пересоздавать). однако удалить его просто так тоже нельзя, поскольку в других модулях используются модели из текущего модуля.
Как в будущем можно поступить так, чтобы просто удаляя модуль система не ломалась? выносить все общие модели в отдельную папку и т.д.? т.е. все общие компоненты модуля выносить в одну общую папку? как тогда структурировать? посоветуйте пожалуйста.
  • Вопрос задан
  • 1272 просмотра
Решения вопроса 1
maksim92
@maksim92 Куратор тега Yii
Нашёл решение — пометь вопрос ответом!
По этому вопросу очень долго искал ответа))
Вам уже скинули статью по независимым модулям, но этого мало. Что вам нужно:

1. Независимый слой MODEL.
В этой папке находятся Use Case (Service), Сама сущность Entity (AR), Желательно иметь репозитории для изоляции от базы данных ну и другой доменный слой логики, который не зависит ни от чего. Ни от фреймворка, ни от других модулей и пакетов. Ваша задача написать код в этой части так, чтобы его можно было скопировать в любую папку, настроить зависимости и чтобы этот код заработал хоть на чистом PHP. Если не планируете менять фреймворк, то можно зависить от фреймворка.

2. Зависимости
Все зависимости модуля реализовать либо через Interface либо через события, но события лучше. А дальше уже синхронизируйте через приложение или отдельный модуль. Можно и по api.

3. UI (пользовательский интерфейс)
Он может быть зависимым от других модулей. В него входят: контроллеры, view, формы, vue.js и так далее. В общем то, с чем взаимодействует пользователь.

Тем самым получается такая система если опираться на MVC:
VC - могут быть зависимы от других модулей
M - не может быть зависима ни от чего, кроме PHP. Желательно и отделять слой базы данных с помощью Repository. Тогда ваш пакет будет очень сильно независим даже от базы. И вам вообще будет без разницы куда вы это храните в user или employee.

Если будет такой слой, то можно спокойно переносить хоть на будущий Yii3. Однако На Yii1 и Yii2 такое сделать сложно. Надо изворачиваться и займет это больше времени. Так как сам Фреймворк вставляет нам палки и приходится делать костыли из-за его монолитности. К такому подходу не привыкли Yii1 и Yii2 разработчики. Обычно на Yii такое понимание «фигак, фигак и в продакшн».

Такую архитектуру удобно будет строить на Symfony ну и будущем Yii3.

Рекомендую к прочтению:
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы