2013-10-14 239 views
3

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

因此,这里是我在想什么:

  1. 控制器如(UserController中)
  2. 服务又名模型接口(UserService)
  3. 服务Implementantions如(UserServiceImpl实现UserService)
  4. DAO接口(UserDao)
  5. Dao Interfaces implmentations eg(DoctrineUserDao)
  6. Doctrine Entities
  7. 查看

我还没牛逼看到了PHP项目的接口来实现的服务和DAO设计模式总是缺少。 php mvc项目中的接口和DAO是多余的吗?

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

+0

没有人可以帮助我呢? – Catalin

回答

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)域对象表示实体(具有在Doctrine的注释中使用Docblock注释格式描述的实体元数据)。 (1)控制器只做调用ORM层的逻辑,也许做一些数据或计算的重组。
  • (4)布局图层可以帮助我将页面的准静态框架与动态内容分离开来。如果您喜欢这个想法,请参阅CodeIgniter and layouts?
  • (5)模板基本上是HTML和几个PHP代码片段。含有类的

我所有的文件都包含每个文件一个类,命名相同的文件名(按http://www.php-fig.org/psr/0/),但我不使用名称空间,因为我觉得很难使其与笨那并不是工作不要使用它们。

您可以将自己的模型加载到自动加载器中,特别是在处理中小型项目时,性能不是非常重要。在这些情况下,我总是使用自动加载器加载所有模型。然而,在一个更大的项目中,加载自动加载器中广泛使用的模型和控制器构造函数中更具体的模型或者更具体的模型(即使在操作中)都是更值得的。