gpt4 book ai didi

php - CodeIgniter 项目结构

转载 作者:行者123 更新时间:2023-12-04 19:24:21 25 4
gpt4 key购买 nike

我必须使用 Codeigniter 和 Doctrine 创建一个 php 项目。我经常使用 j2ee,我想在我的 php 项目中使用相同的项目结构。

这就是我的想法:

  1. Controller ,例如(用户 Controller )
  2. 服务又名模型接口(interface) (UserService)
  3. 服务实现,例如(UserServiceImpl 实现 UserService)
  4. Dao 接口(interface) (UserDao)
  5. Dao 接口(interface)实现,例如(DoctrineUserDao)
  6. Doctrine 实体
  7. 浏览量

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

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

最佳答案

我已经使用 CodeIgniter 设计了一些较小的系统,现在我正在设计/构建一个大系统。我总是遵循相同的结构(我将在此处描述的结构)并且到目前为止它对我来说非常有效。对于我当前的项目,我们尝试使用 Doctrine 作为 ORM,但最终我决定将其从项目中移除——这与其说是帮助,不如说是负担。

(我可能对这些层使用略有不同的术语,但我尽可能将它们与您的术语并列。)

我使用的结构是:

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

职责:

  • (2) Data Mapper 层包含所有的SQL,以及所有的Doctrine EntityManager 用法。它存储和检索域对象。
  • (3) 域对象表示实体(实体元数据在 Doctrine 的注释中描述,使用 Docblock Annotations 格式)。
  • (1) Controllers只做调用ORM层的逻辑,可能做一些数据重构或者计算。
  • (4) 布局层帮助我将页面的准静态框架与更动态的内容分开。参见 CodeIgniter and layouts?如果你喜欢这个想法。
  • (5) 模板基本上是带有一些 PHP 片段的 HTML。

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

您可以在自动加载器中加载您的模型,尤其是当您处理中小型项目并且性能不是关键时。在这些情况下,我总是使用自动加载器加载我的所有模型。然而,在更大的项目中,更值得在自动加载器中加载广泛使用的模型,在 Controller 构造函数中加载更具体的模型,甚至在 Action 中加载更具体的模型。

关于php - CodeIgniter 项目结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19362832/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com