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

标签 php model-view-controller paradigms

我试图理解模型上的“胖”与 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/

相关文章:

javascript - 如何在Nodejs中实例化 Controller 中的模型?

r - R的编程范例是什么?

cpu - MultiCore 架构的出现是否会影响我作为一名软件开发人员?

php - phpseclib-尝试连接到HP Procurve交换机返回错误:不支持SSH命令执行

php - 使用 Twilio 接收短信并将其存储在数据库中

php - WordPress query_var 按域

php - Laravel5 (PHP) 还是 SailsJS (node.js)?

php - Jquery Ajax 和 PHP MVC 模型

oop - 面向对象编程的替代方案?

javascript - 当用户从下拉列表中选择值时,在文本区域中显示数据库值