cakephp - MVC : Correct pattern to reference objects from a different model

标签 cakephp design-patterns activerecord cakephp-2.0

我正在使用 CakePHP2.3,我的应用程序在模型之间有很多关联。 Controller 操作涉及操作来自另一个模型的数据是很常见的。所以我开始在模型类中编写一个方法来保持 Controller 瘦......但是在这些情况下,我永远不确定该方法应该放在哪个模型中?

这是一个例子。假设我有两个模型:Book 和 Author。作者有很多书。在/books/add View 中,我可能想显示一个流行作者的下拉列表,供用户选择与该书相关联。所以我需要在两个模型之一中编写一个方法。我是不是该...

A. 在 Author 模型类中编写一个方法并从 BooksController::add() 操作内部调用该方法...

$this->Author->get_popular_authors()

B. 在 Book 模型类中编写一个方法来实例化另一个模型并使用它的 find 函数......例如:
//Inside Book::get_popular_authors()
$Author = new Author();
$populars = $Author->find('all', $options);
return $populars;

我认为我的问题与问“编写主要处理另一个模型之间关联的模型方法的最佳实践是什么?”如何最好地决定该方法应该属于哪个模型?提前致谢。

PS:我不知道你是否认为 CakePHP 很烂或者不是“真正的”MVC。这个问题是关于 MVC 设计模式的,而不是框架。

最佳答案

恕我直言,该函数应该位于与您尝试检索的数据最匹配的模型中。模型是“数据层”。

因此,如果您正在获取“流行作者”,则该函数应位于 Author 中。模型等等。

有时一个函数不会“完全”适合任何模型,所以你只需选择一个并继续。有很多更有成效的设计决策需要关注。 :)

顺便说一句,在蛋糕中,相关 可以在不获取“其他”模型对象的情况下访问模型。所以如果 BookAuthor 相关:

//BooksController
$this->Book->Author->get_popular_authors();

//Book Model
$this->Author->get_popular_authors();

引用:http://book.cakephp.org/2.0/en/models/associations-linking-models-together.html#relationship-types

关于cakephp - MVC : Correct pattern to reference objects from a different model,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20424892/

相关文章:

java - 避免大量实例化 "MyObjectX extends AbstractObject"来调用每个 myObjectX.execute() ?设计模式 ?

ruby-on-rails - 按模型与特定属性的关联计数排序

php - 将查询字符串传递给 cakephp 中的蛋糕样式 URL,并提供 HTML 的扩展部分

php - cakephp 模型中的电子邮件验证

jquery - 为什么 cakePHP 在通过 jQuery 更改 "disabled"字段后会抛出黑洞?

c# - 工作单元和存储库模式

javascript - cakephp div 和按钮切换

c# - 工厂设计模式(需要批判)

ruby-on-rails-3 - Rails 3 新记录?已弃用

mysql - 处理跨临时服务器和生产服务器的 Rails 迁移的最佳方法是什么?