Mach-II DevGuide 系列译文: 概念与核心文件
2006-01-30 15:32
471 查看
作者:SeanCorfield
本节解释框架的概念以及描绘如何访问核心文件.很多这类信息来自我的MachIIConceptspage.
MVC:Model-View-Controller
第一个概念是MVC(Model-View-Controller)—在这里,表现层(View)完全从事务逻辑(Model)中分离出来,而二者之间的交互是由Mach-II自身(Controller)触发的.View是简单的以HTML描述代码为基础的.cfm文件,可以使用请求(request)域变量以及事件对象(Mach-II设置的,下面有更多信息).Model是ColdFusion组件(CFCs)的集合,后者呈现了程序的所有逻辑(来自数据库与事务规则和决定的交互).Controller从本质上看,是Mach-II本身,而Controller的参数是由mach-ii.xml文件定义的.
Mach-II里Model和Controller之间的关系稍微有点复杂.框架引进了”listeners”的概念,它是一种用来扩展框架的CF组件,为核心Controller与核心Model之间提供粘合剂.这些listener组件可以被看成是Model的一部分或者是Controller的一部分,这要看你是如何组织你的程序的了,不过你最好保持你的程序独立于框架(这样可以使它们易于被WebServices(网络服务),FlashRemoting(远程服务)或其他框架所复用).关于设计模型的章节将详细介绍这部分知识.
间接调用体系(ImplicitInvocationArchitecture)
第二个概念是Mach-II的根基--间接调用体系.你可以在Mach-II的官方网站得到更多这方面的信息(对此,BenEdwards写了很好的文章).基本的前提是事件通过事件句柄,被创建(由用户或者程序)和被触发.Mach-II知道那些活动的事件,进而处理它们,必要时调用litener,描绘view,直到各个请求被完满处理.
设计模式(DesignPatterns)
一些指南会提及关于设计模式的知识(比如SessionFaçade,Memento,TransferObject).这儿有一些好的参考文档:
Sun'sCoreJ2EEPatternsCatalog(includesCompositeView,SessionFaçade,TransferObject)
MartinFowler'sCatalogofPatternsofEnterpriseApplicationArchitecture(includingModel-View-Controller,Gateway)
PortlandPatternRepository'sWiki-PatternIndex(includingMementoandmanyothers)
Mach-II核心文档
框架是Mach-II目录下的CF组件集合.这个目录可以安装在你的CF文件根目录或者是定义在ColdFusionAdministrator定义的常用标签路径下(如:../CustomTags).在Macromedia,Mach-II目录是在CVS下:
你的程序的index.cfm文件(在
<cfincludetemplate="/MachII/mach-ii.cfm"/>[/code]
在包含mach-ii.cfm文件前,你可以设置
<cfsetMACHII_CONFIG_PATH=expandPath("/environment/{appname}/mach-ii.xml")/>
注意,
<cfifnotrequest.productionModeand[/code]
这允许你很容易地通过在URL上加
经常的(1)—
u优点:对listener的修改会立即执行.
u缺点:慢(因为框架每次都要重新载入),会隐藏一些细微的bug(因为如果listener在变量域储存了数据,它会表现出数据在请求域的假相—在listener为请求重创建的时候).
动态的(0)—
u优点:Listener实例数据表现精确(从一个请求持续到另一个),在mach-ii.xm配置改动时容易重新载入;
u对Listener的修改不能自动执行(你需要修改xml文件来获得listener的修改.
从不(-1)—
u优点:创造稳定的产品环境;
u缺点:作任何修改都需要重启服务器.
在macromedia,我们设置
本节解释框架的概念以及描绘如何访问核心文件.很多这类信息来自我的
MVC:Model-View-Controller
第一个概念是MVC(Model-View-Controller)—在这里,表现层(View)完全从事务逻辑(Model)中分离出来,而二者之间的交互是由Mach-II自身(Controller)触发的.View是简单的以HTML描述代码为基础的.cfm文件,可以使用请求(request)域变量以及事件对象(Mach-II设置的,下面有更多信息).Model是ColdFusion组件(CFCs)的集合,后者呈现了程序的所有逻辑(来自数据库与事务规则和决定的交互).Controller从本质上看,是Mach-II本身,而Controller的参数是由mach-ii.xml文件定义的.
Mach-II里Model和Controller之间的关系稍微有点复杂.框架引进了”listeners”的概念,它是一种用来扩展框架的CF组件,为核心Controller与核心Model之间提供粘合剂.这些listener组件可以被看成是Model的一部分或者是Controller的一部分,这要看你是如何组织你的程序的了,不过你最好保持你的程序独立于框架(这样可以使它们易于被WebServices(网络服务),FlashRemoting(远程服务)或其他框架所复用).关于设计模型的章节将详细介绍这部分知识.
间接调用体系(ImplicitInvocationArchitecture)
第二个概念是Mach-II的根基--间接调用体系.你可以在Mach-II的官方网站得到更多这方面的信息(对此,BenEdwards写了很好的文章).基本的前提是事件通过事件句柄,被创建(由用户或者程序)和被触发.Mach-II知道那些活动的事件,进而处理它们,必要时调用litener,描绘view,直到各个请求被完满处理.
设计模式(DesignPatterns)
一些指南会提及关于设计模式的知识(比如SessionFaçade,Memento,TransferObject).这儿有一些好的参考文档:
Sun's
MartinFowler's
PortlandPatternRepository'sWiki-
Mach-II核心文档
框架是Mach-II目录下的CF组件集合.这个目录可以安装在你的CF文件根目录或者是定义在ColdFusionAdministrator定义的常用标签路径下(如:../CustomTags).在Macromedia,Mach-II目录是在CVS下:
{cfmxroot}/extensions/components/MachII/
你的程序的index.cfm文件(在
{cfmxroot}/wwwroot/{appname}/
下)只包含了通向Mach-II目录的mach-ii.cfm核心文件,如果Mach-II装在网络根目录之外的话:
<cfincludetemplate="/MachII/mach-ii.cfm"/>[/code]
在包含mach-ii.cfm文件前,你可以设置
MACHII_CONFIG_MODE,
MACHII_CONFIG_PATH,需要的话,还有
MACHII_APP_KEY.默认情况下,mach-ii.cfm文件使用了作为指向程序域(用来存放程序的框架对象实例)线索生成的请求的目录(例子里的
{appname}).可以通过设置
index.cfm
的MACHII_APP_KEY来重写它(不推荐).
Mach-ii.cfm
默认状况下会像这样./config/mach-ii.xml(跟
{appname}目录有关),它被用来为程序初始化框架.这个路径可以通过index.cfm里的
MACHII_CONFIG_PATH
重写.为安全起见,推荐将你的mach-ii.xml文件放置在的文件跟目录以外的位置,这样它就不能被网络浏览器访问了.在Macromedia,我们重MACHII_CONFIG_PATH如下:
<cfsetMACHII_CONFIG_PATH=expandPath("/environment/{appname}/mach-ii.xml")/>
注意,
/environment是
{cfmxroot}/config/target/
的映射,后者被我们的构造系统创建.所以实际上,CVS下的配置文件是{cfmxroot}/config/development/{appname}/mach-ii.xml,并可以为分段传送,综合或者产品部署的原因被重写,虽然这是不被推荐的(我们有更好的机制来触发特定环境变量).
注意:对于CFMX6.1,expandPath()在Unit(SolarisandMacOSX)系统下有效,而在Windows下不能执行映射.不过这个问题已经在CFMX7里解决了.
MACHII_CONFIG_MODE
默认设置为0(动态的)(1.0.8以上版本).这使得Mach-II只有在mach-ii.xml被改动的情况下动态加载框架.这有助于开发,但在index.xfm里加上这样几句一样很有用:
<cfifnotrequest.productionModeand[/code]
structKeyExists(URL,"reloadApp")>
<cfsetMACHII_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).
相关文章推荐
- Mach-II DevGuide 系列教程译文:程序结构与设计
- Mach-II DevGuide 系列教程译文: 事件句柄的设计
- Mach-II DevGuide 系列教程译文: 模型的设计
- Mach-II DevGuide 系列教程译文: 页面的设计
- Mach-II DevGuide 系列教程译文: 事件过滤器的设计
- 全文检索引擎Solr系列——Solr核心概念、配置文件
- 全文检索引擎Solr系列——Solr核心概念、配置文件
- iOS 系列译文:Mach-O 可执行文件
- 10006---全文检索引擎Solr系列——Solr核心概念、配置文件
- iOS 系列译文:Mach-O 可执行文件
- iOS 系列译文:Mach-O 可执行文件
- 全文检索引擎Solr系列——Solr核心概念、配置文件
- 全文检索引擎Solr系列——Solr核心概念、配置文件
- iOS 系列译文:Mach-O 可执行文件
- iOS 系列译文:Mach-O 可执行文件
- MachII HowTo系列教程的译文: Mach-II 如何开发Listener
- Dev系列控件综合实例(分层的提出,异步上传文件)
- 企业级Hadoop 2.x入门系列之九Hadoop核心配置文件的默认配置解读
- 经典教程翻译系列: Mach-II应用程序配置指南
- solr核心概念、配置文件