了解MVC:模型上的“胖”概念,控制器上的“瘦”概念是什么?

我试图理解模型上的“胖”与控制器上的“瘦”的概念,根据我一直在讨论的内容,我有以下示例(取自freenode的讨论):

问:在MVC范例中,其所说的Fat模型是瘦控制器。我在这里思考的是,如果我有很多方法(在控制器上)仅对CRUD使用了一些抽象方法(在模型上),那么我是在创建胖控制器而不是模型吗?还是他们说,胖模子,退回了什么却没有输入?这是我从未理解过的东西=)任何评论表示赞赏!非常感谢

OBS1:我没有执行模型的操作,在控制器中,我只有控制模型操作的方法

OBS2:假设“ checkIfEmailExists()”具有“

john@hotmail.com”作为参数。该方法将从查询该参数是否存在于表中的模型方法的返回值中返回boolean。如果为0,则“

checkIFemailExists()”将调用一个不同的模型方法,该方法只是另一个执行Update操作的抽象方法。

OBS3:“

checkIfEmailExists()”,不仅仅是控制器吗?他实际上并没有执行任何CRUD,只是在比较值等。这让我感到困惑,因为在我看来,这是一个控制器:S

注意:我猜这不是最好的例子,因为说“检查是否存在”,听起来像是查询我的表操作

Q2:还有一个问题,所以,我有一个查看表单,从该表单发送电子邮件地址参数。您是说视图直接进入模型吗?

Q3:控制器在它们之间不应该动作吗?多数民众赞成在范式

最后说明:讨论结束,说我错了,希望还可以(我正在学习)。但是,第二和第三季度的正确答案是什么?

感谢您的关注

回答:

您的应用程序是M。它应该能够独立于V和C。V和C构成您应用程序的用户界面。对于应用程序的核心业务逻辑而言,这是Web界面还是命令行界面都无关紧要。您希望模型具有业务逻辑。

如果您有一个胖控制器,例如充满业务逻辑,那么您就不会遵循MVC的目的。控制器的唯一责任是处理UI请求并将其委托给模型。这就是为什么它应该很瘦。它只应包含其负责的必要代码。

简化示例

public function fooAction()

{

if(isset($_POST['bar'])) {

$bar = Sanitizer::sanitize($_POST['bar']);

$rows = $this->database->query('SELECT * from table');

try {

foreach($rows as $row) {

$row->foo = $bar;

$row->save();

}

} catch (Exception $e) {

$this->render('errorPage');

exit;

}

$this->render('successPage');

} else {

$this->render('fooPage');

}

}

什么时候应该

public function fooAction()

{

if(isset($_POST['bar'])) {

$success = $this->tableGateway->updateFoo($_GET['bar']);

$page = $success ? 'successPage' : 'errorPage';

$this->render($page);

} else {

$this->render('fooPage');

}

}

因为这就是控制器需要知道的全部。它不应该更新行。它应该只告诉模型有人请求了此更改。更新是类管理行的责任。同样,控制器不一定必须清除该值。

以上是 了解MVC:模型上的“胖”概念,控制器上的“瘦”概念是什么? 的全部内容, 来源链接: utcz.com/qa/415070.html

回到顶部