Caringorm学习笔记
Caringorm学习笔记 | |
Cairngorm事件驱动模型适合于处理业务逻辑,也公适合于处理业务逻辑,最好不要用它来处理界面行为 |
|
FController监听到Caringorm事件后,调用对应的Command | |
一个事件对应一个Command | |
分为6个部分 Business Command Control Model View VO 写作顺序: |
|
Business包括两部分内容: Delegate 和 ServiceLocator | |
ServiceLocator是用于调用远程服务的mxml,不用可以不写,但这里其实是Cairngom的强大优势 | |
Delegate相当于一个代理,通过Command调用,它的工作是定位远程服务并且完成相应的服务调用, | |
Delegate是一个单例模式,我们一般用如下方式通过Delegate调用远程服务 private var remoteObject:RemoteObject = ServiceLocator.getInstance().getRemoteObject |
|
countingService在ServiceLocator中通过如下方式定义: <fx:Declaration> <s:RemoteObject id="counting" destination =''countinService"/> </fx:Declaration> |
|
当然,我们也可以通过HttpService 和WebService 调用远程服务。 如此的话,在Delegate中的调用方法也会有变化的。 Cairngorm中提供了getRemoteObject() getHttpService() getWebService() 三种基本方法分别调用RemoteObject HttpService WebService三种远程调用机制 |
|
每一个定义的Delegate要具有如下的构造函数 public function CountDelegate(responder:IResponder):void{ } |
|
Command 所有的后台函数调用都在Command部分完成。 |
|
所有的Command都实现了ICommand和IResponder接口,IResponder接口定义了resulti()和fault()方法
|
|
其中excute()
函数声明一个Delegate变量,然后通过这个Delegate调用相应的方法, |
|
Command任务的实现实际上是通过Degate来实现的。command的result和fault一般是用来处理Delegate的返回信息 | |
其中result是在处理成功时执行,一般是对Model(ModelLocator)进行处理 fault是在处理失败时候执行。我们用Command调用Delegate来执行远程服务,当Delegate执行完毕的时候,应当如何返回呢,Delegate应当如何定位是哪一个Command传来的执行信号呢,通过给Delegate传递一个IResponder变量(实际上这个变量就是Command自己),Delegate就可以在处理完成之后直接调用Command中的result方法,一般Delegate中有这么一句话。 responder.result(object); object 一般是要返回的值,或者服务相关信息。不会 |
|
Control 部分定义了三个基类, CairngormEvent CairngormEventDispatcher FrontController 相当于一个控制中心,我们所发送的消息和执行的所有命令在这里都有记录。 |
|
FrontController 的构造函数一般只有一句话
this.addCommand(Event_NAME,Command); 它的任务就是监听所有的event,并且为它些消息指定相应的Command |
|
前提是我们需要在界面中声明FrontController <fx:Declaration> </fx:Declaration> |
|
Model Model部分一般存放需要绑定在页面的数据 | |
View 在这里一定要声明ServiceLocator 和 FrontControl | |
vo 简单点儿说,就是一个个的对象 | |
总结: 1.View提供所有可视组件 2.FrontControl监听所有的Event 3.当用户操作引起Event发送时,View通过Cairngorm将Event发送到指定的Event中,这后Event在FrontControl接受处理 4.FontControl将Event发送到相应的Command 。Command调用相应的Delegate 5.Delegate完成远程调用,返回到Command 6.Command结果处理部分返回的信息。并且对Model部分做出修改。 7.Model部分的绑定数据被修改,View部分做出相应的变化。 |
|
要把Eclipse搞会,包括tomcat 数据库 服务器这一块 | |
MetaData里[]号里面有很多东西,都会很有用。 | |
Cairngorm 的实例 构造函数有两个值(type,vo); | |
一个功能块用一个FrontController 不会, 不确定 | |
Command的excute()方法里面第一件要做的事,是判断事件的类型 | |
Delegate的实例 | |
在Services.mxml里面写上ServiceLocator 不会 不确定 | |
ModuleLocator作用不明,不会 | |
要让业务逻辑和界面挂钩,请用ViewHelper | |
顺序一 business里的service model view control event command 初始化control |
|
顺序二 vo modelLocator view event view中触发事件 frontControl 映射 command delegate |
|
super我就一直没有搞明白! | |
command 实现了两个接口。 一个是Responder 一个ICommand
|
|
ModelLocator要起一个独特的名字 | |
instance 得是静态变量。 | |
做第一个实验积累的经验: 1.代码永远要最简原则。 2.FrontController的子类,要放在app里,不用有实例名也可 在它里面只有一个 addCommand(Event,Command) 3.Delegate没有父类,在它的构造函数的参数里要有 rp:mx.rpc.IResponder 4.Delegate时要有一个public 方法。供在Command里调用。 5.RemoteService HttpService WebService 这些要配置在ServiceLocator里面 ,ServiceLocator 要在主场景声明。 6.关于Command三点: 7.事件继承自CairngormEvent 且构造函数里要写上: 它有view这个属性。。 8.ModelLocator不用有父类,这里面要写一个getInstance(). 9.View里做两件事 10.vo 最关键的是注意起名! 11.所有的具体类最好都得实现某个,要根据接口编程 12.vo里最好不要有public的属性 要用getter setter 配合 13.vo为什么要绑定??? 14.为了实现最后一步的ModelLocator数据和view绑定。可以这样:在view定义一个方法。当delegate返回值以后,执行view中的这个方法。 15 和上面说的情况类似,如果要把view中对象的状态发生改变,也可以把ui放到Event里面。在Command里面,通过Event拿到ui,在command里可以直接对view进行控制,这个比上面的方法要好。 16.有些数据没有必要放到ModelLocator里的话,就直接在Command时实现逻辑(比如目标对象状态的改变) |
|
亲自写一次之后的体会: 1.delegate里面的通信方法有很多种,这里面我自己写一个HttpServiceDelegate,要给它的构造函数按顺序传入iresponder,url,method默认为POST ,resultType默认为xml,requestVO 2.要在delegate里面实例化一个HttpService 要给它赋值url method resultFormat request 3.TextVO的绑定我选择没有用。因为我也不太懂!不会 |
|
常量命名的时候,尽量使用动作在前面的命名方式。 | |
在从delegate获取了数据。把数据传给view的时候。这个例子的方法是在command里面加一个private变量。 |