Архитектура моделей Zend Framework 2 [закрыта]
Чтобы прояснить мои сомнения, у меня есть такой сценарий:
У меня есть приложение, которое продает автомобили и дома (просто пример!), Поэтому я создал модуль для отображения всех автомобилей, называемый Автомобили, и один для отображения всех домов, называемый Дома.
У меня есть модуль менеджера, который должен иметь систему CRUD для автомобилей и домов.
Где я должен разместить свои модели автомобилей и домов? Я должен создать модуль только для размещения своих моделей, например, модуль Main
? Или я следует ли размещать мои модели в модулях Автомобили и Дома и получать к ним доступ в модуле Менеджер?
Допустим, я создаю CarModel
с помощью методов выберите, вставить и удалить . Если я помещу эту модель в модуль Cars
, у меня может возникнуть проблема с безопасностью, потому что Cars
теперь есть доступ к методам вставить и удалить ...
С другой стороны, я мог бы создать CarModel
внутри Cars
модуля только с помощью выбора метод, а затем снова создайте CarModel
с вставкой и удалением в модуле Manager
, но это очень затруднит обслуживание кода...
Как лучше всего решить эту проблему?
1 answers
Итак, чтобы ответить на ваш вопрос на высоком уровне, на самом деле есть два способа разбить ваши модули в указанном вами контексте:
- Модуль "все в одном" (объедините admin/CRUD с фактическим модулем, предоставляющим сущности и интерфейсные материалы). Один из моих разработчиков использовал этот подход с этим модулем: https://github.com/speckcommerce/SpeckCatalog
- Отдельные модули. Например, ZfcUser не обеспечивает администрирование пользователей, но zfcuseradmin использует сущности/сопоставители в ZfcUser и предоставляет дополнительные функции управления пользователями/администрирования.
Ни один из подходов не является ни правильным, ни неправильным. Это действительно зависит только от ваших предпочтений и от того, как вы хотите разбить функциональность своего приложения. Например, захотите ли вы когда-нибудь создать сайт, который будет использовать модуль домов или автомобилей без системы управления/CRUD?
На более техническом уровне есть несколько способов, которыми вы можете обрабатывайте "модели" или "сущности" с помощью Zend\Db. Двумя распространенными шаблонами являются шаблон TableGateway и шаблон Data Mapper.
Табличный шлюз: Я написал об этом в блоге:http://blog.evan.pro/zf2-tablegateway-hydration
Сопоставитель данных: Это мое предпочтительное решение. Я еще не писал об этом в блоге, но вы можете найти пример использования в ZfcUser. Кроме того, в ZF2 не встроен картограф базовых данных как и табличный шлюз, но это гораздо более гибкое решение. Ознакомьтесь с abstractdbmapper, предоставленным zfcbase.
Я воспользуюсь этой возможностью, чтобы подразнить пару слайдов из учебника по ZF2, которые Роб Аллен и я дали на PHPNW12, а также снова дадим на ZendCon через пару недель:
Шлюз таблиц http://evan.pro/caps/2ddbaf.png Выбор табличного шлюза http://evan.pro/caps/0904b8.png Абстрактный картограф http://evan.pro/caps/a31480.png Выбор картографа http://evan.pro/caps/a2a04f.png Краткое описание http://evan.pro/caps/3ec9e6.png