Coldfusion中的Model-Glue模型与其他MVC框架中的模型相同吗?

Dan*_* T. 1 model-view-controller coldfusion model-glue coldfusion-9

如果您按照官方Model-Glue文档提供的快速入门指南,请在此处找到:

http://docs.model-glue.com/wiki/QuickStart/2%3AModellingourApplication#Quickstart2:ModelingourApplication

看起来"模型"是执行应用程序操作的类.在这个例子中,他们创建了一个Translator将一个短语翻译成Pig Latin的类.从这里可以很容易地推断出程序逻辑也应该是"模型",例如数据库操作类和HTML帮助程序.

但是,我最近收到了一个关于我在这里询问有关MVC的问题的答案:

使用MVC,我如何设计视图,以便它不需要知道控制器设置的变量?

在其中一个答案中,提到MVC中的"模型"应该是控制器填充数据的对象,然后将其传递给视图,并且视图将其用作强类型对象来呈现数据.这意味着,对于上面提供的模型胶水例如,应该已经是一个翻译器,一个翻译观点,一PigLatinTranslator类,和Translation看起来像这样的模式:

component Translation
{
    var TranslatedPhrase = "";
}
Run Code Online (Sandbox Code Playgroud)

这个控制器会像这样使用它:

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

        event.setValue("translation", translation);
    }
}
Run Code Online (Sandbox Code Playgroud)

视图将呈现如下:

<p>Your translated phrase was: #event.getValue("translation").TranslatedPhrase#</p>
Run Code Online (Sandbox Code Playgroud)

在这种情况下,PigLatinTranslator它只是一个驻留在某处的类,不能被视为模型,控制器或视图.

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

Ada*_*ron 5

我想也许你已经陷入了实施细节的困境.

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

  • 有些工作需要完成
  • 控制器定义了工作的完成方式以及工作方式
  • 控制器[做某事]最终调用模型处理
  • 模型流程处理所有数据处理:从[某处]获取数据,应用业务逻辑,然后将结果放在[某处]
  • 控制器然后[做某事]最终调用视图处理发生,并从模型中获取数据的视图处理系统
  • 视图进程抓取他们期望的数据,并以一些方式呈现数据.

这是故意非常抽象的.

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

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

就这句话而言"在这种情况下,PigLatinTranslator只是一个驻留在某个地方的类,不能被视为模型,控制器或视图." 嗯......是的...所有模型IS都是一些代码.所以PigLatinTranslator.cfc在这里建模业务逻辑.

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

最后,我不认为"强类型"评论在CF环境中是相关的或适当的考虑因素,因为CF不是强类型的.这是一个特定于平台的考虑因素,与MVC原则无关.