首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >控制器应该避免CakePHP中的私有函数吗?

控制器应该避免CakePHP中的私有函数吗?
EN

Stack Overflow用户
提问于 2012-09-21 15:33:15
回答 4查看 3K关注 0票数 3

我想知道CakePHP的控制器是否不应该包含任何不能被URL访问的私有函数。

有时,有些函数,如、add、、delete、会非常大,所以我更喜欢将它们分开。我应该把这个函数放在模型中而不是让控制器私有吗?

谢谢。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-09-21 16:50:08

是的,如果你把你的方法保留在模型里,那可能是最好的。就像你自己在评论中提到的那样,“让模型变胖,让控制器变细”。控制器只是一种媒介,应该是模型和视图之间的交互。

当您必须处理数据源、表中的更改时,问题就出现了。如果您的控制器是胖的,那么您将在任何地方使用字段,现在您将在不应该在的地方清理整个设置。

模型中的方法的另一个好处是,您可以从其他模型调用它,然后重用代码。例如:

代码语言:javascript
复制
class User extends AppModel {

     public function getAllActiveUsers() {
         // return active users
     }

} 

模型和控制器中的每一种方法都可以访问上述方法,这与用户有关。

如果您在其他地方需要这样的函数,并且没有在用户模型中定义它们,那么您将最终将其重定向到控制器,或者重新编写整个逻辑。

重定向并没有那么糟糕,但是考虑一下如果您在其他地方重写了逻辑,那么ActiveUsers的实现会发生什么变化。你最终将不得不在任何地方纠正事情。

然而,有一些事情必须在控制器中完成。例如,如果我必须计算用户的地理位置与所有匹配的餐厅之间的距离,以获得附近的距离,我应该在控制器中这样做。但是,为了最好的利益,控制器是薄薄的,并且为此目的存在组件。您可以为复杂而冗长的逻辑创建自定义组件。

票数 4
EN

Stack Overflow用户

发布于 2012-09-21 18:18:56

我在模型中加入了低级函数。特别是如果该函数可以由多个控制器使用。我所说的“低水平”是指尽可能接近模型数据。如果要对数据进行特定于视图的修改,或者将其与来自其他模型的数据(相关模型是一个例外)结合起来,则该函数不属于该模型。

另外,您可以在任何控制器函数的前缀加上下划线,它将无法通过url获得。

票数 1
EN

Stack Overflow用户

发布于 2012-09-21 21:00:35

处理从数据库中添加和删除条目的逻辑是域业务逻辑的一部分。这种方法应该是模型层的一部分。

由于CakePHP的实现非常有限(它假装模型层是活动记录实例的集合),您可以将这些方法移到某种类型的帮助程序中,或者使用单独的“模型”,这些模型不从AppModel继承。相反,这样的结构可以像服务一样工作,从而将控制器(和表示层作为整体)与域业务逻辑隔离开来。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12533640

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档