Dan*_* T. 1 model-view-controller coldfusion model-glue coldfusion-9
如果您按照官方Model-Glue文档提供的快速入门指南,请在此处找到:
看起来"模型"是执行应用程序操作的类.在这个例子中,他们创建了一个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示例,以及我在上面列出的正确方法的代码?或者我完全偏离了所有这一切?
我想也许你已经陷入了实施细节的困境.
我对(一般)MVC的理解如下:
这是故意非常抽象的.
我认为MG文档中的示例适当地实现了这一点,尽管该示例非常有用.控制器调用处理数据的模型(输入转换为输出),然后设置结果.然后控制器调用获取数据并显示数据的视图.
我不同意这个问题的前提"使用MVC,我如何设计视图,以便它不需要知道控制器设置的变量?" 视图不应该关心数据来自何处,它应该只知道它需要什么数据,并从[某处]获取它.系统中需要有一个约定,模型将数据放在某处,并且视图从某个地方获取所需的数据(否则它将如何工作?); 解耦是模型只是将数据放在告诉它的地方,而视图只是从被告知的地方获取数据.控制器(或使用中的MVC系统的惯例)决定了如何实现.我不认为MG在处理这个问题的方式上打破了MVC的任何原则.
就这句话而言"在这种情况下,PigLatinTranslator只是一个驻留在某个地方的类,不能被视为模型,控制器或视图." 嗯......是的...所有模型IS都是一些代码.所以PigLatinTranslator.cfc在这里建模业务逻辑.
而这一个:"在其中一个答案中,有人提到MVC中的"模型"应该是控制器填充数据的对象,然后传递给视图"......我不认为那是正确.控制器只是需要调用哪些模型和哪些视图来满足要求,并且可能在它们之间交换数据(尽管这也可以通过约定来完成).控制器不进行数据处理; 它决定了需要完成哪些数据处理.
最后,我不认为"强类型"评论在CF环境中是相关的或适当的考虑因素,因为CF不是强类型的.这是一个特定于平台的考虑因素,与MVC原则无关.
| 归档时间: |
|
| 查看次数: |
220 次 |
| 最近记录: |