Архитектура моделей Zend Framework 2 [закрыта]


Чтобы прояснить мои сомнения, у меня есть такой сценарий:

У меня есть приложение, которое продает автомобили и дома (просто пример!), Поэтому я создал модуль для отображения всех автомобилей, называемый Автомобили, и один для отображения всех домов, называемый Дома.

У меня есть модуль менеджера, который должен иметь систему CRUD для автомобилей и домов.

Где я должен разместить свои модели автомобилей и домов? Я должен создать модуль только для размещения своих моделей, например, модуль Main? Или я следует ли размещать мои модели в модулях Автомобили и Дома и получать к ним доступ в модуле Менеджер?

Допустим, я создаю CarModel с помощью методов выберите, вставить и удалить . Если я помещу эту модель в модуль Cars, у меня может возникнуть проблема с безопасностью, потому что Cars теперь есть доступ к методам вставить и удалить ...

С другой стороны, я мог бы создать CarModel внутри Carsмодуля только с помощью выбора метод, а затем снова создайте CarModel с вставкой и удалением в модуле Manager, но это очень затруднит обслуживание кода...

Как лучше всего решить эту проблему?

Author: vascowhite, 2012-10-14

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

 15
Author: EvanDotPro, 2012-10-15 06:43:20