我想知道 CakePHP 的 Controller 是否不应包含任何无法通过 URL 访问的私有(private)函数。
有时,某些功能(例如添加或删除)可能太大,我更喜欢将它们分开。 我应该将该函数放在模型中,而不是在 Controller 上将其设为私有(private)吗?
谢谢。
最佳答案
是的,如果您将方法保留在模型中可能是最好的。就像您自己在评论中提到的那样,“让模型变胖, Controller 变瘦”。 Controller 只是模型和 View 之间交互的媒介。
当您必须处理数据源、表中的更改时,问题就出现了。如果你的 Controller 很胖,你会在任何地方使用这些字段,现在你将不得不清理不应该在的地方的整个设置。
模型中方法的额外好处是您可以从其他模型调用它并重用代码。例如:
class User extends AppModel {
public function getAllActiveUsers() {
// return active users
}
}
模型和 Controller 中的所有其他方法都可以访问上述方法,该方法与用户相关。
如果您在其他地方需要此类函数,并且没有在用户模型中定义它们,那么您最终要么将其重定向到 Controller ,要么重新编写整个逻辑。
重定向的事情并没有那么糟糕,但考虑一下如果您在其他地方重写了逻辑,然后 ActiveUsers 的实现发生了变化,会发生什么。您最终将不得不纠正各处的问题。
但是,有一些事情必须在 Controller 中完成。例如,如果我必须计算用户的地理位置与附近距离的所有匹配餐厅之间的距离,我应该在 Controller 中执行此操作。但最有利的做法是 Controller 保持薄型,并且为此目的而存在组件。您可以为复杂而冗长的逻辑创建自定义组件。
关于cakephp - Controller 应该避免 CakePHP 中的私有(private)函数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12533640/