Лучший способ упаковать модуль Zend общего назначения
Поскольку наша компания начинает использовать Zend Framework в качестве базовой платформы для большинства наших проектов, мы хотим поделиться некоторыми общими элементами во всех наших проектах. Я говорю о таких вещах, как:
- Реализация модели (на основе доктрины2)
- RBAC для модели, включая пользователя, группу, ролевые модели
- Шаблонный движок на основе xml для внутренних интерфейсов ajax
- (вы называете это) ...
В основном, все вещи, чтобы положить "Zend на рельсах" и начать работу. Каков наилучший способ упаковки этих компонентов? Я вижу две возможности:
Как модули
Мы включаем необходимые функции как отдельные модули в папку модулей.
Pro:
- Мы можем устанавливать маршруты и выполнять код, что хорошо для многих модулей (воображаемый пример: для модуля paypal нужен какой-то URL-адрес обратного вызова. Если наш модуль может установить его самостоятельно, конфигурация от "разработчика проекта" не требуется),
- Мы можем предоставить реальную функциональность (например, администрирование пользователей) из коробки
- У нас есть бутстрап для настройки автозагрузки, доктрины и т. Д.
Против:
- Плохое место? Мешает пользователям проекта
- Немного сложнее делиться между проектами (подмодули git вместо classpath)
В папке библиотеки
Мы помещаем его в папку библиотеки и указываем на него путь к классам.
Pro:
- Чистый раствор
- Совместное использование проектов
Против:
- Bootstrap должен быть явно назван
- Никакой прямой маршрутизации или действий - все должно быть передано через конкретный проект
Итак, как вы решаете это? Где вы кладете свои многоразовые вещи общего назначения в zf?
1 ответ
Я думаю, что вы должны использовать оба подхода.
При разработке "подобного библиотеке" кода, например, в виде "инфраструктурных" классов и других вещей, которые можно использовать повторно (таких как собственные компоненты ZF, компоненты Doctrine 2 и т. Д.), Вы можете поместить их в каталог библиотеки. (или свой собственный совершенно отдельный проект)
При разработке реальных модулей ZF (например, модуля auth) отформатируйте код вокруг структуры модуля ZF.
Я думаю, что, используя такой подход, вы получаете все преимущества, которые вы перечислили, и почти ни одного из минусов:)
В качестве дополнительной идеи, если вы разрабатываете свои части архитектуры как "сервисы", вы можете даже поддерживать их в качестве собственных конечных точек веб-сервисов.