Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php CodeIgniter项目结构_Php_Codeigniter_Doctrine - Fatal编程技术网

Php CodeIgniter项目结构

Php CodeIgniter项目结构,php,codeigniter,doctrine,Php,Codeigniter,Doctrine,我必须使用Codeigniter和Doctrine创建一个php项目。 我经常使用j2ee,我希望在我的php项目中使用相同的项目结构 这就是我的想法: 控制器例如(用户控制器) 服务aka模型接口(用户服务) 服务实现,例如(UserServiceImpl实现UserService) Dao接口(UserDao) Dao接口实现,例如(DoctrineUserDao) 实体主义 观点 我还没有看到在php项目中实现服务接口,dao设计模式总是缺失。在php mvc项目中,接口和DAO是冗余的吗

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

这就是我的想法:

  • 控制器例如(用户控制器)
  • 服务aka模型接口(用户服务)
  • 服务实现,例如(UserServiceImpl实现UserService)
  • Dao接口(UserDao)
  • Dao接口实现,例如(DoctrineUserDao)
  • 实体主义
  • 观点
  • 我还没有看到在php项目中实现服务接口,dao设计模式总是缺失。在php mvc项目中,接口和DAO是冗余的吗

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

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

    (我可能会对图层使用稍微不同的术语,但我尽量将它们与您的术语平行放置。)

    我使用的结构是:

  • 控制器(例如/application/Controllers/UserController.php)
  • 数据映射器(ORM)层(例如/models/tables/UserTable.php)
  • 域对象层(例如/models/data\u models/User.php)
  • 布局(例如/models/Layouts/default.php)
  • 模板(视图)(例如/application/Templates/user/view profile.php)
  • 职责:

    • (2) 数据映射器层包含所有SQL和所有条令EntityManager用法。它存储和检索域对象
    • (3) 域对象表示实体(使用Docblock注释格式,在comments for Doctrine中描述了实体元数据)
    • (1) 控制器只执行调用ORM层的逻辑,可能执行一些数据或计算的重组
    • (4) 布局层帮助我将页面的准静态框架与更动态的内容分离开来。看看你是否喜欢这个主意
    • (5) 模板基本上是带有一些PHP代码段的HTML
    我所有包含类的文件每个文件都包含一个类,名称与文件名(按)相同,但我不使用名称空间,因为我发现很难使用不使用名称空间的CodeIgniter


    您可以在autoloader中加载您的模型,尤其是当您从事中小型项目且性能不重要时。在这种情况下,我总是用自动加载器加载我的所有模型。但是,在更大的项目中,在autoloader中加载广泛使用的模型,在controller构造函数中加载更具体的模型,甚至在actions中加载更具体的模型更值得。

    没有人能帮我解决这个问题吗?