当我们公司开始使用Zend Framework作为我们大多数项目的基础框架时,我们希望在我们所有的项目中共享一些共同的元素。我说的是:
- 一个模型的实现(基于doctrine2)
- 模型的RBAC,包括用户、组、角色模型
- 基于xml的ajax后端接口模板引擎
基本上,所有的事情都让"zend on rails"并开始行动。打包这些组件的最佳方式是什么?我看到两种可能:
作为模块我们将必要的功能作为单独的模块包含到modules文件夹中。
职业:
- 我们可以设置路由和执行代码,这是很好的许多模块(想象的例子:一个paypal模块需要某种回调url。如果我们的模块可以自己设置,则不需要"项目开发人员"的配置)。
- 我们可以提供真正的功能(如用户管理)开箱即用
- 我们有一个bootstrap来设置自动加载和学说等。
反对:
- 不好的地方吗?干扰用户项目
- 更难在项目之间共享(git子模块而不是类路径)
在库文件夹
我们把它放在库文件夹中,并指向它的类路径。
职业:
- 清洁解决方案
- 跨项目共享
反对:
- Bootstrap必须显式地调用
- 没有直接路由或操作-所有东西都必须通过具体项目代理
那么,如何解决这个问题呢?你把可重复使用的,通用的东西放在zf的什么地方?
我认为你应该同时使用两种方法。
当开发"类库"代码时,如"基础设施"类和其他可重用的东西(如ZF自己的组件,Doctrine 2的组件等),您可以将它们放入库目录中。(或它自己完全独立的项目)
在开发实际的ZF模块(例如,像验证模块)时,然后围绕ZF模块结构格式化代码。
我认为通过使用这种方法,您可以获得您列出的所有优点,而几乎没有缺点:)
作为一个额外的想法,如果您将架构部分开发为"服务",您甚至可以让它们作为自己的web服务端点运行。