Где хранить класс, который используется в нескольких модулях ZF2? [закрыто]
У меня есть уровень обслуживания в моем приложении Zend Framework 2. На этом уровне у меня есть абстрактный базовый класс, который расширяют все классы обслуживания, как показано ниже.
Базовый класс:
namespace User\Service;
use Zend\ServiceManager\ServiceManagerAwareInterface;
use Zend\ServiceManager\ServiceManager;
class AbstractService implements ServiceManagerAwareInterface {
protected $serviceManager;
public function setServiceManager(ServiceManager $serviceManager) {
$this->serviceManager = $serviceManager;
}
public function getServiceManager() {
return $this->serviceManager;
}
}
Класс обслуживания:
namespace User\Service;
use User\Service\AbstractService;
class UserService extends AbstractService {
public function register($id, $username, $password) {
/* ... */
}
}
Дело в том, что базовый класс будет использоваться во всех моих модулях (каждый модуль будет иметь уровень обслуживания), и мне интересно, где его лучше всего хранить. У меня точно такой же сценарий для моего уровня базы данных. Прочь в верхней части моей головы я могу придумать несколько возможностей:
- Копия в каждом модуле. Не очень элегантное решение и не простое в обслуживании.
- Одна копия в модуле "Приложение", и каждый модуль использует эту одну копию. Создает межмодульные зависимости.
- В каталоге
vendor
и, следовательно, вне любого каталога модулей. Я еще не слишком хорошо знаком с композитором, но, думаю, я мог бы добавить его в качестве зависимости?
Итак, в основном вопрос в том, где разместить классы, которые используются несколькими модулями. Заставить его работать нетрудно, но проблема в том, чтобы сделать это наилучшим возможным способом.
1 answers
Я думаю, что хорошей практикой является объединение всех ваших базовых классов и функций в независимый общий модуль, ваши другие модули будут зависеть от этого общего модуля.
Есть много ссылок, на которые вы могли бы взглянуть:
После того, как у вас будет общий модуль, вы можете определить отношения, зависящие от модуля, с помощью composer, а затем просто одна строчная команда для установки всех зависимых модулей.