CodeIgniter项目结构

时间:2013-10-14 14:41:38

标签: php codeigniter doctrine

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

所以这就是我的想法:

  1. 控制器,例如(UserController)
  2. 服务又称模型接口(UserService)
  3. 服务实现,例如(UserServiceImpl实现UserService)
  4. Dao Interfaces(UserDao)
  5. Dao接口实施例如(DoctrineUserDao)
  6. 学说实体
  7. 浏览
  8. 我没有看到在php项目接口中实现服务,并且总是缺少dao设计模式。在php mvc项目中,接口和DAO是多余的吗?

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

1 个答案:

答案 0 :(得分: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)
  6. 职责:

    • (2)Data Mapper层包含所有SQL和所有Doctrine EntityManager用法。它存储和检索域对象。
    • (3)域对象代表实体(使用Docblock注释格式在Doctrine的注释中描述实体元数据)。
    • (1)控制器只执行调用ORM层的逻辑,可能会对数据或计算进行一些重组。
    • (4)布局层帮助我将页面的准静态帧与更动态的内容分开。如果您愿意,请参阅CodeIgniter and layouts?
    • (5)模板基本上是带有几个PHP代码段的HTML。

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

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