我正在研究一个项目,我很困惑,把什么代码放在哪里。 我在这里举一个简单的例子来说明为什么我有点困惑。
想象一下在cakephp应用程序中的几个网页,可以以某种方式创建一个帐户 - 与此帐户一起,需要调用来自模型和库的其他几个函数(示例压缩一些,为帐户创建证书,...)。
看到它需要在多个位置完成并且不完全属于模型(+是相当多的代码),最好的方法是使用我想到的组件。
只要您在Web服务器后面,这很有效,但是如果我还希望在Shell中提供所有这些功能呢? - 然后我不能使用组件,只能加载库。
我可以/想要共享的所有函数/ php代码就是这种情况,以便在控制器中的所有shell中都可以使用所有逻辑。
这里有问题:) =&gt; 所以我的所有组件都需要是libs?,在这些库中加载模型/其他库等架构是否正确?那么组件的用途是什么?,可能还是'rm -rf'它们并且只使用libs?< / p>
到目前为止,我使用组件的方法是将所有可以/需要在控制器之间共享的过程逻辑放在其中。 当我不需要任何模型或只是静态函数的集合(例如操纵图像的例子)时,我使用了Libs。 这样做我在使用Shell脚本时就已经/需要访问这些组件中的逻辑了。
我的理解出错的地方有什么想法吗?
答案 0 :(得分:4)
你自己已经给出了所有答案!
是的,组件可以在控制器之间共享功能。只有控制器。 因此,如果您需要在模型或shell中使用该功能,而不是错误放置。
你应该把我的shell和控制器使用的代码放入模型层(如果它的模型/数据库相关)或libs(静态/计算东西等)。 那些可以从双方使用。
您可以在库中使用模型,反之亦然。注意不要创建太多的依赖关系和循环关系。那些也很难测试/扩展/修改。
组件可用于包装这些lib / model方法,以便快速方便地进行控制器访问,还可以执行更自动化和控制器特定的处理。 类似于SessionComponent,它只包装CakeSession类,以便在控制器中提供简单的会话访问。
顺便说一下:包装你的同样的信心也可以在命令行环境中使用Tasks来完成。那些只不过是“贝壳组件”。