Модель не является классом или каким-либо отдельным объектом. Это очень распространенная ошибка […], потому что большинство фреймворков увековечивают это заблуждение.
Итак, какова лучшая структура папок для моделей?
Zend Рекомендуемая структура каталогов проекта, например, имеет только папку «модель». Но когда я пытаюсь разделить свои модели на Доменные объекты, картографы данных и сервисы, как должна выглядеть эта структура?
Спасибо!
Я думаю, что это субъективно, но я дам вам мой способ сделать это. Я держу models
каталог, а затем создать различные подкаталоги для каждого модуля приложения. Это будет выглядеть примерно так:
application
- controllers
- models
- authentication
- services
- mappers
- ...
- mail
- services
- mappers
- ...
... (other directories)
- views
- templates
Я чувствую, что это дает хорошее разделение каждого модуля, сохраняя все внутри models
каталог, к которому другие разработчики привыкли.
Я не знаю, является ли это лучшим или наиболее эффективным решением, но я думаю, что при правильном использовании пространств имен им легко управлять. Я также узнал, что если вы правильно используете SOLID principle
Вы можете (почти) копировать / вставлять различные каталоги / модули в другие проекты без особых хлопот.
Я надеюсь, что это может помочь вам в правильном направлении.
С наилучшими пожеланиями.
В Zend Framework вы можете создавать «модули», которые могут интегрировать свои собственные модели.
application/
configs/
application.ini
controllers/
helpers/
forms/
layouts/
filters/
helpers/
scripts/
models/
modules/
Domain Objects/
controllers/
models/
Data Mappers/
controllers/
models/
Services/
controllers/
models/
services/
views/
filters/
helpers/
scripts/
Bootstrap.php
Как видите, с каждым модулем связаны также контроллеры и представления.
Наконец, вы должны добавить эти модели в автозагрузчик вашего начального загрузчика:
// Admin
$resourceLoader = new Zend_Loader_Autoloader_Resource(array(
'basePath' => APPLICATION_PATH . '/modules/Domain Objects',
'namespace' => 'Domain Objects'
));
$resourceLoader->addResourceType('controller', 'controllers/', 'Controller')->addResourceType('model', 'models/', 'Model');