PHP MVC 文件夹结构/模型-文件夹-结构

PHP MVC folder structure / Model-Folder-Structure

The model is not a class or any single object. It is a very common mistake to make [...], because most frameworks perpetuate this misconception.

那么,模型的最佳文件夹结构是什么?

Zend Recommended Project Directory Structure, for example, has only a "model" folder. But when I try to separate my models into Domain Objects, Data Mappers and Services,这个结构应该是怎样的?

谢谢!

在 Zend Framework 中您可以创建 "modules" 可以集成自己的模型。

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

如您所见,每个模块也有关联的控制器和视图。

最后,您必须将这些模型添加到 bootstrap 的自动加载器中:

// 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');

我认为这是主观的,但我会告诉你我的做法。我保留 models 目录,然后为应用程序的每个模块创建不同的子目录。它看起来像下面这样:

application
  - controllers
  - models
     - authentication
         - services
         - mappers
         - ...
     - mail
         - services
         - mappers
         - ...
     ... (other directories)
  - views
  - templates

我觉得这很好地分离了每个模块,同时将所有内容都保存在其他开发人员习惯使用的 models 目录中。

我不知道这是否是最佳或最有效的解决方案,但我认为通过正确使用命名空间,它证明非常易于管理。我还了解到,如果您正确使用 SOLID principle,您可以(几乎)copy/paste 将不同的 directories/modules 用于其他项目而无需太多麻烦。

A little series created by TutsPlus, which explains the SOLID principle in detail by using theory and a concrete example.

希望这可以帮助您找到正确的方向。 最好的问候。