Model view controller 是型号胶水';Coldfusion中的模型与其他MVC框架中的模型相同吗?

Model view controller 是型号胶水';Coldfusion中的模型与其他MVC框架中的模型相同吗?,model-view-controller,coldfusion,coldfusion-9,model-glue,Model View Controller,Coldfusion,Coldfusion 9,Model Glue,如果您遵循官方Model Glue docs提供的快速入门指南,请参见: “模型”似乎是一个执行应用程序操作的类。在本例中,他们创建了一个将短语翻译成拉丁语的翻译器类。从这里很容易推断程序逻辑也应该是“模型”,例如数据库操作类和HTML助手 然而,我最近收到了一个关于MVC的问题的答案: 在其中一个答案中,有人提到MVC中的“模型”应该是控制器用数据填充的对象,然后将数据传递给视图,视图将其用作强类型对象来呈现数据。这意味着,对于上面提供的模型粘合示例,应该有一个翻译器控制器、一个翻译器视图

如果您遵循官方Model Glue docs提供的快速入门指南,请参见:

“模型”似乎是一个执行应用程序操作的类。在本例中,他们创建了一个将短语翻译成拉丁语的
翻译器
类。从这里很容易推断程序逻辑也应该是“模型”,例如数据库操作类和HTML助手

然而,我最近收到了一个关于MVC的问题的答案:

在其中一个答案中,有人提到MVC中的“模型”应该是控制器用数据填充的对象,然后将数据传递给视图,视图将其用作强类型对象来呈现数据。这意味着,对于上面提供的模型粘合示例,应该有一个翻译器控制器、一个翻译器视图、一个
翻译器
类和一个类似以下内容的
翻译器
模型:

component Translation
{
    var TranslatedPhrase = "";
}
component TranslatorController
{
    public function Translate(string phrase)
    {
        var translator = new PigLatinTranslator();
        var translation = new Translation();
        translation.TranslatedPhrase = translator.Translate(phrase);

        event.setValue("translation", translation);
    }
}
<p>Your translated phrase was: #event.getValue("translation").TranslatedPhrase#</p>
此控制器将按如下方式使用它:

component Translation
{
    var TranslatedPhrase = "";
}
component TranslatorController
{
    public function Translate(string phrase)
    {
        var translator = new PigLatinTranslator();
        var translation = new Translation();
        translation.TranslatedPhrase = translator.Translate(phrase);

        event.setValue("translation", translation);
    }
}
<p>Your translated phrase was: #event.getValue("translation").TranslatedPhrase#</p>
视图将呈现如下所示:

component Translation
{
    var TranslatedPhrase = "";
}
component TranslatorController
{
    public function Translate(string phrase)
    {
        var translator = new PigLatinTranslator();
        var translation = new Translation();
        translation.TranslatedPhrase = translator.Translate(phrase);

        event.setValue("translation", translation);
    }
}
<p>Your translated phrase was: #event.getValue("translation").TranslatedPhrase#</p>
您翻译的短语是:#event.getValue(“translation”).translated短语#

在这种情况下,
piglatinttranslator
仅仅是驻留在某处的类,不能将其视为模型、控制器或视图


我的问题是,ColdFusion Model Glue的模型与MVC模型不同吗?或者他们提供的快速入门指南是一个糟糕的MVC示例,而我上面列出的代码是正确的方法?还是我完全偏离了这一切的方向?

我想你可能陷入了实施的细节中

我对MVC(一般)的理解如下:

  • 有些工作需要做
  • 控制器定义如何完成该工作以及如何呈现该工作
  • 控制器[执行某些操作]最终调用模型处理
  • 模型流程处理所有数据处理:从[某处]获取数据,应用业务逻辑,然后将结果放在[某处]
  • 然后,控制器[执行某些操作]最终调用视图处理,并利用来自模型的数据的视图处理系统
  • 视图进程获取他们期望的数据,并以某种方式呈现这些数据
这是故意非常抽象的

我认为MG文档中的示例恰当地实现了这一点,尽管这个示例非常做作。控制器调用处理数据的模型(将输入转换为输出),然后设置结果。然后,控制器调用获取数据并显示数据的视图

我不同意这个问题的前提“使用MVC,如何设计视图,使其不需要了解控制器设置的变量?”视图不应该关心数据来自何处,它应该只知道它需要什么数据,并从[某处]获取它。在系统的某个地方确实需要有一个约定,即模型将要使用的数据放在某个地方,视图从某个地方获取它需要的数据(否则它将如何工作?);解耦是模型只是将数据放在它被告知的地方,而视图只是从它被告知的地方获取数据。控制器(或使用中的MVC系统的约定)决定了如何实现。我不认为MG在处理这个问题的方式上违反了MVC的任何原则

就这句话而言,“在这种情况下,PigLatinTranslator只是一个驻留在某处的类,不能被视为模型、控制器或视图。”。。。是 啊模型只是一些代码。因此,piglatinttranslator.cfc在这里为业务逻辑建模

这一条:“在其中一个答案中,有人提到MVC中的“模型”应该是一个对象,控制器用数据填充该对象,然后将数据传递给视图”。。。我认为那是不对的。控制器只是争论需要调用哪些模型和哪些视图来满足需求,并可能在它们之间交换数据(尽管这也可以通过约定实现)。控制器不进行数据处理;它决定需要进行哪些数据处理


最后,我不认为“强类型”注释在CF环境中是相关的或适当的考虑,因为CF不是强类型的。这是一个特定于平台的考虑事项,与MVC原则无关。

我认为您可能陷入了实现的细节中

我对MVC(一般)的理解如下:

  • 有些工作需要做
  • 控制器定义如何完成该工作以及如何呈现该工作
  • 控制器[执行某些操作]最终调用模型处理
  • 模型流程处理所有数据处理:从[某处]获取数据,应用业务逻辑,然后将结果放在[某处]
  • 然后,控制器[执行某些操作]最终调用视图处理,并利用来自模型的数据的视图处理系统
  • 视图进程获取他们期望的数据,并以某种方式呈现这些数据
这是故意非常抽象的

我认为MG文档中的示例恰当地实现了这一点,尽管这个示例非常做作。控制器调用处理数据的模型(将输入转换为输出),然后设置结果。然后,控制器调用获取数据并显示数据的视图

我不同意这个问题的前提“使用MVC,如何设计视图,使其不需要了解控制器设置的变量?”视图不应该关心da在哪里