carngorm框架中,主程序关于service locator与controller的笔记
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,那也就是为什么我发现只有实例化却没有引用的原因。
以上是个人意见,请大家拍砖。
最新评论