Mach-II DevGuide 系列译文: 概念与核心文件

作者:  Sean Corfield

 

本节解释框架的概念以及描绘如何访问核心文件.很多这类信息来自我的Mach II Concepts page.

 

MVC:Model-View-Controller

 

         第一个概念是MVC(Model-View-Controller)—在这里,表现层(View)完全从事务逻辑(Model)中分离出来,而二者之间的交互是由Mach-II自身(Controller)触发的.View是简单的以HTML描述代码为基础的.cfm文件,可以使用请求(request)域变量以及事件对象(Mach-II设置的,下面有更多信息).ModelColdFusion组件(CFCs)的集合,后者呈现了程序的所有逻辑(来自数据库与事务规则和决定的交互).Controller 从本质上看,Mach-II本身,Controller的参数是由mach-ii.xml文件定义的.

 

Mach-IIModelController之间的关系稍微有点复杂.框架引进了”listeners”的概念,它是一种用来扩展框架的CF组件,为核心Controller与核心Model之间提供粘合剂.这些listener组件可以被看成是Model的一部分或者是Controller的一部分,这要看你是如何组织你的程序的了,不过你最好保持你的程序独立于框架(这样可以使它们易于被Web Services(网络服务),Flash Remoting(远程服务)或其他框架所复用).关于设计模型的章节将详细介绍这部分知识.

 

间接调用体系(Implicit Invocation Architecture)

第二个概念是Mach-II的根基--间接调用体系.你可以在Mach-II的官方网站得到更多这方面的信息(对此,Ben Edwards写了很好的文章).基本的前提是事件通过事件句柄,被创建(由用户或者程序)和被触发.Mach-II知道那些活动的事件,进而处理它们,必要时调用litener,描绘view,直到各个请求被完满处理.

 

设计模式(Design Patterns)

一些指南会提及关于设计模式的知识(比如Session Façade, Memento, Transfer Object).这儿有一些好的参考文档:

 

Mach-II核心文档

框架是Mach-II目录下的CF组件集合.这个目录可以安装在你的CF文件根目录或者是定义在ColdFusion Administrator定义的常用标签路径下(:../CustomTags).Macromedia,Mach-II目录是在CVS:

          {cfmxroot}/extensions/components/MachII/
   
   

你的程序的index.cfm文件({cfmxroot}/wwwroot/{appname}/)只包含了通向Mach-II目录的mach-ii.cfm核心文件,如果Mach-II装在网络根目录之外的话:

          <cfinclude template="/MachII/mach-ii.cfm" />
   
   

 

在包含mach-ii.cfm文件前,你可以设置MACHII_CONFIG_MODE, MACHII_CONFIG_PATH, 需要的话,还有 MACHII_APP_KEY.默认情况下,mach-ii.cfm文件使用了作为指向程序域(用来存放程序的框架对象实例)线索生成的请求的目录(例子里的{appname}).可以通过设置index.cfmMACHII_APP_KEY来重写它(不推荐).

 

Mach-ii.cfm默认状况下会像这样./config/mach-ii.xml ({appname}目录有关),它被用来为程序初始化框架.这个路径可以通过index.cfm里的MACHII_CONFIG_PATH重写.为安全起见,推荐将你的mach-ii.xml文件放置在的文件跟目录以外的位置,这样它就不能被网络浏览器访问了.Macromedia,我们重MACHII_CONFIG_PATH如下:

     <cfset MACHII_CONFIG_PATH = expandPath("/environment/{appname}/mach-ii.xml") />

 

注意, /environment {cfmxroot}/config/target/的映射,后者被我们的构造系统创建.所以实际上,CVS下的配置文件是{cfmxroot}/config/development/{appname}/mach-ii.xml,并可以为分段传送,综合或者产品部署的原因被重写,虽然这是不被推荐的(我们有更好的机制来触发特定环境变量).

 

注意:对于CFMX6.1,expandPath()Unit(Solaris and Mac OS X)系统下有效,而在Windows下不能执行映射.不过这个问题已经在CFMX7里解决了.

 

MACHII_CONFIG_MODE默认设置为0(动态的)( 1.0.8 以上版本).这使得Mach-II只有在mach-ii.xml被改动的情况下动态加载框架.这有助于开发,但在index.xfm里加上这样几句一样很有用:

          <cfif not request.productionMode and
   
   
                    structKeyExists(URL,"reloadApp")>
   
   
                    <cfset MACHII_CONFIG_MODE = 1 />
   
   
          </cfif> 
   
   

 

这允许你很容易地通过在URL上加?reloadApp的方式强制执行一次.在完工的时候,你通常要把MACHII_CONFIG_MODE 改成-1 (从不).这里有不同模式效果的总结:

经常的(1)—

u        优点:listener的修改会立即执行.

u        缺点:(因为框架每次都要重新载入),会隐藏一些细微的bug(因为如果listener在变量域储存了数据,它会表现出数据在请求域的假相listener为请求重创建的时候).

动态的(0)—

u        优点:Listener实例数据表现精确(从一个请求持续到另一个),mach-ii.xm配置改动时容易重新载入;

u        Listener的修改不能自动执行(你需要修改xml文件来获得listener的修改.

从不(-1)—

u        优点:创造稳定的产品环境;

u        缺点:作任何修改都需要重启服务器.

 

macromedia,我们设置sitewideconstants.cfm里的MACHII_CONFIG_MODE为默认的动态的来开发和测试环境,对成品设置为从不”.标准的mach-ii.cfm文件在它被定义并且你没有重写index.cfm里的MACHII_CONFIG_MODE情况下使用这个默认(request.MachIIConfigModel).

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值