gpt4 book ai didi

php - 了解 Controller 上的 MVC : Whats the concept of "Fat" on models, "Skinny"?

转载 作者:IT王子 更新时间:2023-10-28 23:51:37 24 4
gpt4 key购买 nike

我试图理解模型上的“胖”与 Controller 上的“瘦”的概念,从我一直在讨论的内容中,我有以下示例(这来自 freenode 讨论):

问:在 MVC 范例中,它说 Fat models,skinny controllers。我在这里想,如果我有很多方法(在 Controller 上)只使用一些抽象方法来 CRUD(在模型上),我是在创建一个胖 Controller 而不是模型吗?或者他们说,胖模型,害怕返回而不是键入的内容?这是我从未理解过的东西 =) 任何意见表示赞赏!非常感谢

OBS1:我没有通过模型做任何事情,在 Controller 中,我只有控制模型的方法

OBS2:假设“checkIfEmailExists()”具有“john@hotmail.com”作为参数。此方法将从查询此参数是否存在于表中的模型方法中获取返回值,返回 bool 值。如果为 0,“checkIFemailExists()”将调用不同的模型方法,这个方法,他只是另一个抽象方法,执行更新操作。

OBS3:“checkIfEmailExists()”不只是一个 Controller 吗?他实际上并没有执行任何 CRUD,他只是比较值等。这让我感到困惑,因为在我的脑海中这是一个 Controller :S

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

Q2:还有一个问题,假设我有一个 View 表单,从那里发送电子邮件地址参数。您是说 View 直接转到模型吗?

Q3:controller不应该在他们之间行动吗?这就是范式

最后说明:讨论结束,说我错了,wish is ok (i'm learning)。但是,那么,Q2 和 Q3 的正确答案是什么?

感谢您的关注

最佳答案

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

如果你有一个胖 Controller ,例如充满了业务逻辑,你没有坚持 MVC 的宗旨。 Controller 的唯一职责是处理 UI 请求并将其委托(delegate)给模型。这就是为什么它应该是瘦的。它应该只包含它所负责的代码。

简化示例

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');
}
}

因为这就是 Controller 需要知道的全部内容。它不应该更新行。它应该只是告诉模型有人要求进行此更改。更新是管理行的类的责任。此外, Controller 不一定要清理值。

Q2和Q3,请看我对Can I call a Model from the View的回复.

关于php - 了解 Controller 上的 MVC : Whats the concept of "Fat" on models, "Skinny"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3109715/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com