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的过度使用的几乎所有的门面模式研究。但我保证你不会让你的代码更好。