代码点火器项目结构


CodeIgniter project structure

我必须使用Codeigniter和Doctrine创建一个php项目。我在j2ee上做了很多工作,我想在我的php项目中使用相同的项目结构。

所以这就是我在想的:

    控制器
  1. ,例如(用户控制器)
  2. 服务
  3. 又名模型接口(用户服务)
  4. Services Implementantions eg (UserServiceImpl implements UserService)
  5. 道接口(用户道)
  6. 道接口 emplmentations eg(DoctrineUserDao)
  7. 学说实体
  8. 视图

我还没有看到在php项目中实现服务的接口,并且dao设计模式总是丢失。接口和DAO在php mvc项目中是多余的吗?

还有一个问题:据我所知,Codeigniter 使用以下语法加载模型:$this->load->model('UserServiceImpl');在我看来这有点蹩脚,我更喜欢使用带有命名空间的自动加载器,这很糟糕吗?

我用CodeIgniter设计了一些较小的系统,现在我正在设计/构建一个大的系统。我一直遵循相同的结构(我将在这里描述的结构),到目前为止,它对我非常有效。对于我当前的项目,我们尝试使用Doctrine作为ORM,但最终我决定将其排除在项目之外 - 这更多的是一种负担而不是帮助。

(我可能会对图层使用略有不同的术语,但我试图尽可能将它们与您的术语并行。

我使用的结构是:

  1. 控制器(例如/application/controllers/UserController.php)
  2. 数据映射器 (ORM) 层(例如/models/tables/UserTable.php)
  3. 域对象层(例如/models/data_models/User.php)
  4. 布局(例如/models/layouts/default.php)
  5. 模板(视图)(例如/application/templates/user/view-profile.php)

责任:

  • (2) Data Mapper 层包含所有 SQL 和所有 Doctrine EntityManager 用法。它存储和检索域对象。
  • (3) 域对象表示实体(使用文档块注释格式,在 Doctrine 的注释中描述实体元数据)。
  • (1)控制器只做调用ORM层的逻辑,可能会做一些数据重组或计算。
  • (4)布局层对我将页面的准静态框架与更动态的内容分开有很大帮助。请参阅代码点火器和布局?如果你喜欢这个想法。
  • (5)模板基本上是带有一些PHP片段的HTML。

我所有包含类的文件每个文件都包含一个类,其名称与文件名相同(根据 http://www.php-fig.org/psr/0/),但我不使用命名空间,因为我发现很难让它与不使用它们的 CodeIgniter 一起使用。

您可以在自动加载器中加载模型,特别是如果您处理中小型项目并且性能不重要。在这些情况下,我总是使用自动加载器加载所有模型。但是,在更大的项目中,更值得在自动加载器中加载广泛使用的模型,在控制器构造函数中加载更具体的模型,甚至在操作中加载更具体的模型。