我的模型中有一个函数需要来自模型中另一个函数(生成)的信息。我应该从控制器还是模型中调用它?
从控制器调用生成
class Inventory extends Controller {
function add_stock()
{
$generate = $this->model->generate(); //call generate from controller
$this->model->current_stock($generate);
}
}
class Model {
public function current_stock($generate)
{
//do something with information from generate
}
public function generate()
{
//do something
return
}
}
OR
在模型中
class Inventory extends Controller {
function add_stock()
{
$this->model->current_stock();
}
}
class Model {
public function current_stock()
{
$generate = $this->generate(); //call generate from model
//do something with information from generate
}
public function generate()
{
//do something
return
}
}
两者都有效,但哪种解决方案最好?
请注意!这只是代码exemel并且可能包含错误,只是想说明我的意思。
答案 0 :(得分:1)
问题在于这是否是模型中不存在的东西。
模型通常应该与控制器完全分离,因此能够独立存在(并且可以单独使用)。因此,如果这只是与模型相关的东西,它可能应该存在;如果它只是一个(在许多用例中),那么控制器可能更合适。
但考虑到你的例子
$generate = $this->model->generate(); //call generate from controller
$this->model->current_stock($generate);
如果你发现自己只在一些其他(=非自我)对象上操作并改变它的状态,那么让模型处理它通常会更好,因为如果你从外面做这件事,你经常会对内部工作做出假设对象。没有提到代码似乎没有意图揭示......正在生成什么?
因此我找到类似
的东西$this->model->generate_current_stock();
更合适。 或者甚至完全隐藏它(如果它还没有生成,它将被生成)。
$this->model->current_stock();
答案 1 :(得分:0)
在这个用例中,我肯定会说后者。似乎generate()仅通过Model类操作,并且应该是私有方法(不是受保护或公共方法)。
本质上,第一个例子是访问(应该是)私有方法并复制该模型的逻辑。
$generate = $this->model->generate();
以上是冗余代码;这将越来越明显,您执行的验证越多。
答案 2 :(得分:0)
只需进行微小更改,现在您可以通过调用控制器中的$this->model->add_stock();
来使用它。此外,您可以毫无问题地为每种方法编写测试;)
优点:
$this->model->add_stock();
方法而不必担心任何错误。$this->model->add_stock();
,我就知道这个方法的用途。我甚至不需要了解发电机或现有库存。class Inventory extends Controller
{
function add_stock()
{
$this->model->add_stock();
}
}
class Model
{
public function current_stock($generate)
{
//do something with information from generate
}
public function generate()
{
//do something
return;
}
function add_stock()
{
$generate = $this->generate();
$this->current_stock($generate);
}
}