Когда готового плагина уже недостаточно
Собственный модуль нужен, если бизнес-логика специфична, готовое решение требует постоянных правок core/vendor или не может обеспечить нужную интеграцию и модель данных.
Готовое решение или свой модуль
| Ситуация | Лучше |
|---|---|
| Стандартная форма/SEO/basic cache | готовый plugin |
| Специфичный workflow бизнеса | свой модуль |
| Нужна мелкая настройка готового API | адаптер/extension |
| одит, но надо править core | свой слой/модуль |
| Критичная интеграция CRM/ERP | отдельный модуль с логами и retry |
| Одноразовый скрипт | не обязательно полноценный модуль |
Границы модуля
Модуль должен владеть своей конфигурацией, таблицами/миграциями, логированием и публичным API. Он не должен требовать ручной правки ядра после каждого обновления CMS.
Пример нейтральной структуры модуля
my-module/
├── src/
│ ├── Service/
│ ├── Repository/
│ └── Http/
├── migrations/
├── config/
├── templates/
├── assets/
├── tests/
├── install.php
├── update.php
├── uninstall.php
└── README.mdЧто предусмотреть до первой версии
- установку без ручного SQL;
- версионирование schema migrations;
- безопасное обновление;
- rollback критичных миграций;
- настройки вне исходного кода;
- log level и диагностический режим;
- права доступа;
- очистку/сохранение данных при uninstall;
- README для следующего разработчика.
Не смешивайте интеграцию и интерфейс
Если модуль работает с CRM/API/платежами, отделите transport/client слой от бизнес-логики. Тогда смена внешнего API не заставит переписывать весь интерфейс.
Скачать примеры для веб-разработки
Связанные материалы
Когда собственный модуль выгоднее готового
Сравните готовые решения по поддержке версий CMS, безопасности, доступности исходного кода, качеству документации и возможности обновления без правок ядра. Если для достижения цели приходится регулярно изменять vendor-файлы или обходить модель прав, стоимость сопровождения готового модуля может оказаться выше собственной разработки.
В техническом задании укажите формат данных, интерфейс менеджера, права, миграции и способ безопасного обновления. Отдельно проверьте, что отключение модуля не ломает базовые функции сайта.