carngorm框架中,主程序关于service locator与controller的笔记
本站内容除转载精华分类或注明zz以外,其他均为原创内容。转载请注明出处,yhustc.com版权所有
flex写着写着,就越写越大了,多个view state,大量的处理函数,http service等也好几个,总之是越来越大呀,于是就想用框架了。关于flex框架的介绍,可以看看天地会的wiki上的一篇文章:选择一个Flex框架
我选的是carngorm,主要是因为手头借了一本flex的书,最后一章就是介绍carngorm的使用,并有一个详细的开发实例,学起来比较方便。
怎么开发的我就不讲了吧,大家自己去找资料学习。本文主要是记录一个问题,在application中需要定义一个service locator,还要定义一个controller,但是我发现这两个变量在整个程序中并没有引用呀。一开始一直不明白写这里是干嘛的。
开始以为是书上搞错了,后来去下了一个别人写的carngorm的demo,看了一下application,也有这么两行。看来这不是写错了呀,还真是都这么干。想来想去,我认为我想通了,于是记录在这里,以备以后查阅。有会carngorm的大牛,麻烦帮忙看一下,发表下评论,因为我也不知道自己写得对不对。
首先是service locator的定义。因为我们在ServicesDelegate里,是裸用的ServiceLocator.getInstance().getService("***"),这个***是自己定义的remote service引用的控件。按理来说carngorm是没办法自己来分析源码来找到他在哪里的,只有在运行时把他生成一份了,这时你再用getService("***")才能返回正确的引用,所以呢,自己定义的service你需要实例化一个才行。因为他包裹在carngorm:ServiceLocator标签里,实例化过程,我们可以认为他是一个注册过程。这样运行时,给定service的id,就可以实现对应的远程调用了。
其次是controller的定义。同样我们可以发现在event中,每个event都需要由controller帮忙调用对应的command,而command与event的对应关系,是在controller的构造函数中调用的addCommand完成的。所以这个controller那肯定也是要有一个实体对象才行。只不过addCommand以后,这个event与command的对应关系就交给carngorm来维护了,所以不需要自己显示的调用controller,那也就是为什么我发现只有实例化却没有引用的原因。
以上是个人意见,请大家拍砖。
Feng | 2009-10-27 10:36:18
首先申明偶不是大牛,呵呵。我也是最近刚开始接触Flex,Carngorm更是这几天才开始看的。 我有些疑问不知道你能否帮忙看下:
1.com.adobe.cairngorm.business.ServiceLocator.getInstance().getService("***").这个ServiceLocator是个框架的类,但是“****”是自定义的ServiceLocator子类中的一个属性id,我的疑惑是这个ServiceLocator.getInstance().getService()方法是在子类中查找定义的属性的么?
2. 这里的server连接到具体哪个服务就是用的server-config.xml中的channel定义的<end-point>指向的站点么? 我找了半天了,没发现还有其他地方配置这些信息的。
不知道偶说的是不是很清楚啊,我看的demo是“http://examples.adobe.com/flex3/devnet/networkmonitor/main.html”这个站点下的代码,右键可以下载它的代码。
另外你还有什么可以学习carngorm 框架可以共享下啊,我找的一些资料对配置文件这一块都是空白。
拜谢!
email: lu_feng@hoperun.com 卢峰
yhustc | 2009-10-29 18:57:44
第一个问题,ServiceLocator.getInstance().getService("***"),这个按照框架流程,他会到business目录下的services.mxml里去查找ServiceLocator下对应ID的对象,可以是各类service,比如HTTPService之类。你在Delegate里面取出来后自己把对象类型搞正确就行了。第二个问题,服务是在server-config.xml里定义的,他用的是amf与后台通信
carngorm我也没看什么资料,感觉主要是要自己动手写,写多了就明白里面的消息分发流程了