eme*_*his 7 activerecord design-patterns cakephp cakephp-2.0
我正在使用CakePHP2.3,我的应用程序在模型之间有很多关联.控制器动作通常涉及操纵来自另一个模型的数据,这是很常见的.所以我开始在模型类中编写一个方法来保持控制器的粗糙......但在这些情况下,我不确定该方法应该采用哪种模型?
这是一个例子.说我有两个模型:书和作者.作者有很多书.在/ books/add视图中,我可能希望显示一个热门作者的下拉列表,供用户选择与该书相关联.所以我需要在两个模型之一中编写一个方法.我是不是该...
A.在Author模型类中编写一个方法,并从BooksController :: add()内部调用该方法...
$this->Author->get_popular_authors()
Run Code Online (Sandbox Code Playgroud)
B.在Book模型类中编写一个实例化其他模型并使用它的查找函数的方法...例如:
//Inside Book::get_popular_authors()
$Author = new Author();
$populars = $Author->find('all', $options);
return $populars;
Run Code Online (Sandbox Code Playgroud)
我认为我的问题与"编写主要处理另一个模型之间关联的模型方法的最佳实践是什么?"相同.如何最好地确定该方法应属于哪种模型?提前致谢.
PS:我不想听你是否认为CakePHP糟透了或不是"真正的"MVC.这个问题是关于MVC设计模式,而不是框架.
恕我直言,该函数应该在与您尝试检索的数据最匹配的模型中.模型是"数据层".
因此,如果您要获取"热门作者",则该函数应位于Author
模型中,依此类推.
有时一个函数不能"干净地"适合任何模型,所以你只需选择一个并继续.您需要关注更高效的设计决策.:)
顺便说一句,在Cake中,可以访问相关模型而无需获取"其他"模型对象.所以如果Book
与以下内容有关Author
:
//BooksController
$this->Book->Author->get_popular_authors();
//Book Model
$this->Author->get_popular_authors();
Run Code Online (Sandbox Code Playgroud)
参考:http://book.cakephp.org/2.0/en/models/associations-linking-models-together.html#relationship-types
遵循编码标准: get_popular_authors() 这应该是驼峰式的 getPopularAuthors()。
我进一步猜测您想显示流行作者的列表。我将使用一个元素来实现这一点,缓存该元素,并使用 requestAction() 获取该元素中的数据,以从 Authors 控制器获取数据(该操作调用模型方法)。
这样,代码就位于“正确”的位置,您的元素将被缓存(性能奖励)并可在任何位置重用。
这让我回想起
“编写主要处理另一个模型之间关联的模型方法的最佳实践是什么?”
理论上,您可以将代码填充到任何模型中并通过 assocs 调用它。我想说常识适用于此:您的方法应该在最匹配的模型/控制器中实现。与用户有关吗?用户模型/控制器。它是属于用户的书吗?书籍模型/控制器。
我总是尝试保持低耦合并将代码放入特定的域中。另请参见关注点分离。
归档时间: |
|
查看次数: |
598 次 |
最近记录: |