Модульная структура (не зависящая друг от друга) без избыточности в Zend Framework - PullRequest
2 голосов
/ 04 августа 2011

Я работаю на небольшом уровне системы управления контентом (CMS), используя Zend Framework и Doctrine. Чтобы объяснить мой вопрос, я создал простую структуру, в которой я строю два модуля (Admin, Frontsite), как вы можете видеть в следующей структуре.

application
  - configs
  - controllers
  - models
  - modules
     - frontsite
         - controllers
           -FrontController
            -shownewsAction()
            ...
           ...
         - models
         - views
           ...
         ...
     - admin
         - controllers
           -NewsController
         - models
           -news (extends newsbase)
           -newsbase
         - views
           ...
         ...
  - views   

Модуль администратора обрабатывает все запросы администратора, а модуль frontsite обрабатывает запросы посетителей. Если я создаю модель (т.е. новости) в модуле администратора и разрешаю фронт-контроллеру из модуля frontsite доступ к нему. Тогда мой один модуль станет надежным для другого модуля.

Насколько я знаю, одна из целей модульного подхода состоит в том, чтобы сохранить каждый модуль ненадежным, не полагаясь друг на друга. Один модуль может быть снят без какого-либо влияния на любой модуль в архитектуре. Ну, если это одна из целей модульного подхода, тогда я должен создать ту же модель (новости) в моделях лицевой стороны. Это приведет к избыточности в моем проекте, который определенно не является частью объектно-ориентированного дизайна, потому что он достигнет своей цели повторного использования.

Первый подход. Нужно ли создавать еще один общий модуль, в котором я буду хранить общие модели и позволять другим модулям получать к нему доступ? Означает ли это, что некоторые мои модули будут иметь только архитектуру VC и будут получать доступ к моделям из общего модуля?

Второй подход, о котором я думаю, заключается в создании какого-либо уровня обслуживания, который поможет связать один модуль с другим, разве это не будет снова зависимым друг от друга?

Другим подходом может быть смещение всех распространенных моделей в папку библиотеки. Все модули будут иметь к ним доступ из библиотеки. Таким образом, некоторые из модулей станут модулями VC, но не будут полагаться на другие модули. Таким образом, мы можем способствовать повторному использованию, исключить избыточность и не допускать зависимости модулей друг от друга.

Какова отраслевая практика? Любое экспертное мнение!

Я выполнил поиск в stackoverflow и в Google, чтобы получить ответ. Но никто из них точно не ответил на мой вопрос.

Некоторые поиски

Поиск 1 Поиск 2 Поиск 3 Поиск 4

Ответы [ 2 ]

2 голосов
/ 04 августа 2011

Я сейчас делаю то же самое.Я настроил свою CMS с модулем «Администратор» и модулем «Внешний интерфейс».Я храню все свои модели в application/models, а не в любом из них.

Поскольку модели не относятся только к одному модулю, было бы лучше поместить их «выше» модулей в структуру.

Я не знаю, какие у вас есть настройки для автозагрузки, но для информации, у меня есть это в моей начальной загрузке:

protected function _initAutoload() {
    $autoloader = Zend_Loader_Autoloader::getInstance();
    ini_set('include_path', ini_get('include_path').";".APPLICATION_PATH);
    $autoloader->registerNamespace('Models_');
    ...more code...

}
1 голос
/ 04 августа 2011

Вы можете поместить свои модели в

application
  - configs
  - controllers
  - models (this is made to be shared between your module)
    -news
    -newsbase

Вы можете получить к ним доступ, позвонив им Model_News и Model_Newsbase

<?php class Model_News extends Model_Newsbase ?>

...