我所谓的使用MVC模式其实是利用了cfmodule的嵌套调用特点.下面是MCV模式的图示:
我这里把应用页面文件当做view.然后按照栏目分类,每个栏目拥有自己的读取数据功能,那么这个就是model了,然后写一个.cfm文件作为调用文件(controller),按照不同的请求来调用不同栏目文件中的不同数据.
下面我给个简单的实例.因为我没有特地去做一个实例,所以只是程序上取下来的几段然后改了下.
view页
以下是代码片段: <CFMODULE module="doc" template="action/cfmodule.cfm"> <cfdump var="#Request.alldoc#"> |
Request.alldoc是在model中已经定义好的一个数据集.
Controller页 :
以下是代码片段: <cfparam name="Attributes.param1" type="string" default=""> <cfparam name="Attributes.param2" type="string" default=""><!--- 来自路径 ---> <cfswitch expression="#Attributes.module#"> <cfcase value="doc"><!--- 查看所有 Doc ---> <CFMODULE param1="viewall" template="CM_model.cfm"> </cfcase> <cfcase value="doc_add"><!--- 添加一个 Doc ---> <!--- 定义来自表单的数据 ---> <cfset REQUEST.add_id = #form.f_1#> <cfset REQUEST.add_title = #form.f_2#> <CFMODULE param1="addone" param2="form.xxx" param3="xxx" param4="xxx.cfm" template="CM_model.cfm"> </cfcase> </cfswitch> |
doc和doc_add是两个判断常量.
model页:
以下是代码片段: <cfparam name="Attributes.param1" type="string" default=""> <cfparam name="Attributes.param2" type="string" default=""> <cfparam name="Attributes.param3" type="string" default=""> <cfparam name="Attributes.param4" type="string" default=""> <cfswitch expression="#Attributes.command#"> <!--- 处理Document ---> <cfcase value="viewall"><!--- 查看所有 Document ,返回collection ---> <cfquery name="getDoc" datasource="#Request.xxx#" username="#Request.xxx#" password="#Request.xxx#"> SELECT * FROM xxxx **************省略************** </cfquery> <cfset Request.alldoc=getDoc> </cfcase> <cfcase value="addone"> <cfquery name="getDoc" datasource="#Request.xxx#" username="#Request.xxx#" password="#Request.xxx#"> INSERT INTO xxx SET xxx = ’#REQUEST.xxx#’ *****************省略****************** </cfquery> </cfcase> </cfswitch> |
如代码所见,我在几个模块中都使用request传递.request在Coldfusion中的功能类似一个对象,其作用域为当前页面(seesion是当前浏览器),感觉简直是为这个应用量身定做的.由于使用的是cfmodule,所以在application.cfm中定义的值我也都用上了request.这个模式的应用会造成一定速度的缓慢,但是优点是显而易见的,至少我可以做到没有一个生成页可以看到我的controller所在的位置,而model则藏得更好,不过其他的相关安全措施该防备的还是要防备的.呵呵.这是我在最近的网站开发过程中做得写尝试,并且已经成功运用.当然我这里的MVC分类还是不太标准的.希望对你有点启发吧