关于php:CakePHP模型:为什么实例方法?

CakePHP models: why instance methods?

为什么所有cakephp模型方法都是实例方法?例如:

1
$post = $this->Post->findById($id);

代替

1
$post = Post::find($id);

我认为所有处理模型实例(或记录)的方法都是实例方法,例如:

1
2
$post = ...;
$post->publish(); // Would be $this->Post->publish($id) using Cake

所有创建或查找记录的方法(用于记录的总集合)都是类方法(实例方法),例如:

1
2
3
4
5
6
$post = Post::findById($id); // Would be $this->Post->findById($id) using Cake

$newPost = Post::create(['title' => 'My post', 'body' => '<p>
...
</p>'
]);
// Would be $newPost = $this->Post->create([...]); using Cake

我认为这个蛋糕约定与逻辑OOP约定相反。有人知道这个设计的原因吗?


  • 静态调用或singletons硬使用依赖注入,使它和使它难测试你的代码。你需要紧耦合的代码不工作。你想松散耦合。
  • 当模型是使用新创建的实例是通过协会,这就是为什么有一个别名属性模型。你可以在不同的behaviours绑定到它或改变它的状态,在其他的方式。
  • 你想可以修改和过载的方法和创建新实例的属性和飞。例子:有两个相同的表的模型的实例,但写的两个数据库。这是一个非常喜欢的一个场景的应用程序使用DB连接取决于用户或登录虚拟主机的一部分。
  • 你显然不想走这只是延长singletons PHP扩展模型:

I think this Cake convention is contrary to logical OOP conventions.
Does anyone know the reason of this design?

你的描述不是逻辑NOR的良好做法。好的,你可以提供一些链接,解释为什么你认为这是"逻辑的面向对象的"公约"。但没有传统的设计模式。一个良好的用例是"工具"类类的"实用工具"文件夹(在CakePHP的。有没有需要有多个实例。

湖的老问题:论文的链接

  • http://kore-nordmann.de /博客/静态_ _ harmful.html被视_ 0103
  • 当使用静态instantiated班VS
  • 为什么人们使用singletons的PHP框架
  • 静态类和Singleton模式之间的差异?

如果你希望"看"或"需要"你想它,你可以使用它而不是让laravel CakePHP的过度使用的几乎所有的门面模式研究。但我保证你不会让你的代码更好。