我一直在学习模型 - 视图 - 控制器范例(“MVC”),但我很困惑,因为有些教程与其他教程相矛盾。
我目前对这个过程的理解看起来像这样:
这是从某些存储源(如数据库或XML文件)收集原始数据的位置。该模型用作抽象层,将特定数据的 Controller的请求转换为(例如)SQL查询,并将查询结果转换为标准格式,如数据对象。
例如,在上述/ browse / all场景中:
这是该应用程序的真正主力。除了将消息来回传递到 Model 和 View 之外, Controller 还负责Authorization 和应用程序之类的事情。 /“business”逻辑编辑:每个答案,业务逻辑属于Model。
在正在进行的示例中,Controller将负责:
e.g。
<html>
<head>
<title>
<?php $question->getTitle() ?>
</title>
</head>
<body>
<h1> <?php $question->getQuestionText(); ?> </h1>
<h2> Answers: </h2>
<div class="answerList">
<?php formatAnswerList($question->getAnswers()); ?>
</div>
</body>
</html>
formatAnswerList()
方法会从 Controller 中获取一系列答案,并在调用像include $markupPath . "/formatAnswer.inc"
这样的小模板时循环遍历它们。只是一个答案容器。答案 0 :(得分:2)
我认为这种描述对控制器的影响太大,而在模型上则不够。理想情况下,该模型位于业务逻辑所在的位置。控制器实际上只是站点用户的接口,它需要路由控制。看一下之前关于该主题的讨论:
Understanding MVC: Whats the concept of "Fat" on models, "Skinny" on controllers?
答案 1 :(得分:0)
基本上,你把所有东西都放在了正确的位置。
在您的示例中,您定义了一个Question类 - 它将被称为ViewModel,它只是一个容器,用于在视图中查看/从View中检索的所有数据。
在某些情况下,我看到ViewModel被忽略了,Model被传递给View - 当我第一次看教程时,这让我很困惑,我不喜欢省略ViewModel,我认为这会让事情变得混乱。