Mach-II常见问题 (翻译自www.mach-ii.Info)

作者:  www.mach-ii.Info   译者:  Franks

1.在哪里放置作用域为application的变量(比如dsn)?
 对于简单字符串,可以在mach-ii.xml文件中的<property>标签里定义。你可以通过getProperty()方法,在filter/listener/plugin/view中访问它们。
 
<cfset dsn = getProperty("dsn") />
 
那些需要在运行时计算的复杂数据则可以通过plugin初始化参数再用setProperty()方法来触发。比方说,你可以使用一个bean来储存应用程序常数。这样的bean看上去像这样:
 
<cfcomponent displayName="ApplicationConstantsBean" hint="An application constants bean.">
<!--- CONSTRUCTOR --->
 <cffunction name="init" access="public" returntype="ApplicationConstantsBean" output="false" >
 <cfargument name="dsn" type="string" required="false" default="" />
      
 <cfset variables.instance = structNew() >
 <cfset setdsn(arguments.dsn) />
      
 <cfreturn this />
</cffunction>
   
    <!--- GETTERS/SETTERS --->
    <cffunction name="getdsn" access="public" returntype="string" output="false">
       <cfreturn variables.instance.dsn />
    </cffunction>
   
    <cffunction name="setdsn" access="public" returntype="void" output="false">
       <cfargument name="dsn" type="string" required="true" />
       <cfset variables.instance.dsn = arguments.dsn />
    </cffunction>

</cfcomponent>
      
 
之后,你的plugin配置方法可以初始化这个bean,并将它设置为框架的参数:
 
<cffunction name="configure" access="public" returntype="void" output="false">                         
<cfscript>
   variables.appConstants=createObject
   ("component","machii_info.model.applicationConstantsBean").init(
     dsn="machii_info");
   setProperty("appConstants",variables.appConstants);
</cfscript>
    </cffunction>


第三步 ,listener 可以像这样在配置中使用这个 bean
 
<cffunction name="configure" access="public" returntype="void" output="false" >             
       <cfscript>          
          var appConstants = getProperty("appConstants");
            variables.dsn = appConstants.getDsn();
          variables.myGateway = createObject("component","cfcpath.myGateway").init(dsn);
       </cfscript>                
    </cffunction>
 
同样的 你的 view 可以得到 appConstants
 
<cfscript> appConstants = getProperty('appConstants');</cfscript>
 
注意 这个例子时使用 bean 来封装应用程序变量的 你也可以通过结构体或其他复杂数据来达到目的。
同样要注意,这个例子只适合1.0.10以上版本。
 
 
2.该如何在event handler中定义重定向(redirect/cflocation)?
 不同于Fusebox 4在xml文件中使用<relocate>命令的方法,Mach-II没有这样的xml命令语法来实现重定向。你将需要执行filter,然后可以这样做:
 
<event-handler event="someEvent"
access="public">                   
          <event-bean name="abean" type="com.domain.model.abean." />   
          <notify listener="someListener" method="update" />          
          <filter name="redirect" >     
             <parameter name="announceEvent" value="eventToRedirectTo" />
             <parameter name="argsToCopy" value="anUrlParam" />
          </filter>            
</event-handler>

具体的 filter 的例子可以在 mach-ii.info 范例中得到。
 
3.当mach-ii.xml文件越来越大的时候,性能会不会受到影响?
 性能不会受大体积的xml文件多大影响。有很多大通行量的程序的mach-ii.xml文件包含多达1000行以上。xml文件只在启动时被读取一次,它的体积不会在运行时影响程序。
 
4.该如何载入用户自定义函数(UDFs)并在应用程序中访问它们呢?
 与将包含应用程序常量的bean在prepertyManager中的存储方法类似,你可以将你的UDFs封装在组件并存储在prepertyManager中。
 
5.哪些好书有助于学习Mach-ii?
 有几本不是专门讲解Mach-ii书可以推荐。里面有关于面向对象设计和模式的实质内容的讲解。包括
Applying UML and Patterns - (Craig Larman)

Design Patterns: Elements of Reusable Object-Oriented Software - (Eric Gamma et al.) The "Gang of Four" book.

Design Patterns Explained - (Alan Shalloway)

Head First Java - (Bert Bates, Kathy Sierra)

Java For ColdFusion Developers - (Eben Hewitt)

 
6 . 哪些服务器平台支持 Mach-II?
 CFMX 6.1 以上版本支持 Mach-II
 Mach-II 还可以运行于 BlueDragon 6.1 beta3 但有一下一些注意点
     × 经常需要为 CFCs 使用满权限类型的名称 full qualified type names ××);
     × 不要在 <cfscript> 标记里使用 return 而需要使用 <cfreturn/>
    ×当调用某个方法时,要保证传递了所有在方法中申明过的变量,甚至在这些变量不是必需的的情况下;
     ×如果变量尚未在 <cfargument> 中申明,请不要传递它们;
       ×不允许绝对类型转换( implicit type conversion ),除非该明确的类型是现行类型的父类。用于PHP和Java的Mach-II目前还处于内部开发阶段,尚未公开测试。
 
 
7.为什么我要使用Mach-II代替Fusebox?
 由于具有面向对象的本质,Mach-II可以更好地支持低耦合和高内聚的开发风格。这使得软件易于维护(和增强)。
 做什么样的选择真正归结为开发者或者开发团队的风格。如果你或你的团队倾向于(或者希望了解更多)面向对象的设计和开发,Mach-II便是理想的选择。换句话说,如果你更喜欢面向过程的编程,则应选择Fusebox。
 
8.在虚拟主机(shared hosting)环境下,如何运行Mach-II?
 如果你的主机已经将Mach-II安装在CF wwwroot目录下,你可以直接使用它。
 如果不是这种情况,你需要将Mach-II安装到你的网站根目录下,然后请求主机做一个映射(mapping)到你的根目录。
 如果不可以,你仍然可以把Mach-II安装在你的网站根目录下,不过将需要修改一下Mach-II内核文件:搜索并重置 Mach-II. the.path.to.your.webroot.Mach-II
 如果你使用Dreamweaver MX,你可以通过 find/replace 来更快捷地完成以上操作。
 
 
9.如何从监听器(listener)清除事件队列(event queue)?
 clearEventQueue()是eventContext的一个方法。eventContext作为变量传递给filters和plugins,而不是listeners。因此,无法通过listener来完成清除工作。如上所述,eventContext可以在request作用域下被访问,但这不被推荐。这是框架内部执行的具体信息,而不打算提供给开发人员使用。
另一个选择就是执行自定义invoker来传递eventContect给listener方法。该途径在Mach-II邮件列表(×××)中有过讨论。
 
 
10.Filter和Listener有哪些不同点?如何决定使用的时机?
   你可以在listener里修改事件对象,但不可以中断当前事件的触发,同样不可以在listener里清除事件队列。除了能力上的不同点,他们的用途也不同。listener专注于事件触发器和模型之间的相互作用,而filter则关注事件触发器和控制器之间的相互影响。
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值