5

我正在做一个项目,我很困惑将什么代码放在哪里。我将在这里举一个简单的例子来说明为什么我有些困惑。

想象一下 cakephp 应用程序中的多个网页,其中可以以一种或另一种方式创建帐户 - 连同此帐户,需要调用模型和库中的其他几个函数(例如 zip 文件,为帐户创建证书,.. .)。

鉴于它需要在多个位置完成并且不完全属于模型(+是相当多的代码),最好的方法是使用我认为的组件。

这很好用,只要您在 Web 服务器后面,但如果我也想在 Shell 中提供所有这些功能怎么办?- 然后我不能使用组件,只能加载库。

这就是我可以/想要共享的所有函数/php 代码的情况,以使所有逻辑在两个 shell 中都可用,就像在控制器中一样。

问题来了:) => 所以我所有的组件都需要是库?,在这些库中加载模型/其他库等是否架构正确?,那么组件的用途是什么?,还不如'rm -rf ' 他们只使用库?

到目前为止,我使用组件的方式是将所有可以/需要在控制器之间共享的流程逻辑放入其中。当我不需要任何模型或仅需要一组静态函数(操作图像的示例)时,我使用的库。这样做我碰壁了,我想/需要在使用 Shell 脚本时访问这些组件中的逻辑。

关于我的理解出错的任何想法?

4

1 回答 1

4

你自己已经给出了所有的答案!

是的,组件可以在控制器之间共享功能。只有控制器。因此,如果您在模型或外壳中需要该功能,那么它就错位了。

您应该将我的 shell 和控制器都使用的代码放入模型层(如果它的模型/数据库相关)或库(静态/计算的东西等)。然后可以从双方使用。

您可以在库中使用模型,反之亦然。请注意不要创建太多的依赖关系和循环关系。这些也很难测试/扩展/修改。

组件可用于包装这些 l​​ib/model 方法,以便快速方便地访问控制器,还可以进行更多的自动化和控制器特定处理。与仅包装 CakeSession 类以在控制器中提供简单的会话访问的 SessionComponent 类似。

顺便说一句:您也可以在命令行环境中使用 Tasks 进行同样的便捷包装。这些只不过是“外壳组件”。

于 2013-06-05T20:38:04.810 回答