CodeIgniter 项目结构

3

我需要使用Codeigniter和Doctrine创建一个PHP项目。 我已经在J2EE上工作了很多,希望在我的php项目中使用相同的项目结构。

所以这是我正在考虑的:

  1. 控制器例如(UserController)
  2. 服务即模型接口 (UserService)
  3. 服务实现例如 (UserServiceImpl implements UserService)
  4. 数据访问对象接口 (UserDao)
  5. 数据访问对象接口实现例如 (DoctrineUserDao)
  6. Doctrine实体
  7. 视图

我还没有在php项目中看到过服务接口和dao设计模式的实现。在phpmvc项目中,接口和DAO是否都是多余的?

并且另一个问题:据我所知,CodeIgniter使用以下语法来加载模型: $this->load->model('UserServiceImpl'); 我认为这种方法有点愚蠢,我更喜欢使用命名空间和自动加载程序。这样做不好吗?


有人能帮我解决这个问题吗? - Catalin
1个回答

1
我用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) 数据映射层包含所有的SQL语句和Doctrine EntityManager的使用。它存储和检索领域对象。
  • (3) 领域对象代表实体(使用Docblock注释格式为Doctrine描述实体元数据)。
  • (1) 控制器只负责调用ORM层的逻辑,可能会对数据进行一些重组或计算。
  • (4) 布局层帮助我将页面的准静态框架与更动态的内容分离开来。如果您喜欢这个想法,请参阅CodeIgniter和布局?
  • (5) 模板基本上是带有一些PHP片段的HTML。

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

你可以在自动加载器中加载模型,特别是如果你正在处理一个小型或中等规模的项目,并且性能不是关键。在这些情况下,我总是使用自动加载器加载所有模型。但是,在大型项目中,更值得将广泛使用的模型加载到自动加载器中,而将更具体的模型加载到控制器构造函数中,甚至在操作中加载更具体的模型。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接