1、CairngormCairngormCairngorm是Abode推出的Flex RIAs框架,其实是MVC的发扬光大,它由七大部分组成。1. Model(数据模型M):使用singleton(单例)模式共享变量;2. VO( Value Object):储存特定值对象变量。3. VIew(视图V):将Model的数据绑定互组件并广播侦听Cairngorm Event;4. Controller(控制器):侦听Cairngorm事件并将其映射到Cairngorm Command;5. Command(命令):调用Cairngorm Delegate或其它Command ,并更新Model;6.
2、 Delegate(委托):实例化RPC(远程过程调用)并将其结果返回给Command;7. Business(业务):定义RPC。使用Cairngorm的第一步是建立框架结构的骨架,包括了三个对象:Model Locater;Service Locator;Front Controller;Model Locator:承载了组件之间的所有的传递的信息和数据,这是一个Bindable(可绑定的)对象。Service Locator:定义了与数据源(Httpservice,Webservice,Remoteobject)之间通讯的界面。Front Controller:建立播送事件(Dispat
3、ch event)和命令层(command)之间的对应关系(mapping)。看一下相关的代码:BuddyAppModelLocator.as:Xml代码 1. packagecom.ny.flex.cairngorm.model2. 3. importcom.ny.flex.cairngorm.vo.User;4. 5. importmx.collections.ArrayCollection;6. 7. Bindable8. publicclassBuddyAppModelLocator9. 10. publicvarbuddyList:ArrayCollection=newArrayCo
4、llection();11. publicvarloginUser:User=newUser();12. publicvarviewStackSelectedIndex:int=0;13. 14. staticprivatevar_instance:BuddyAppModelLocator=null;15. 16. staticpublicfunctiongetInstance():BuddyAppModelLocator17. 18. if(_instance=null)19. 20. _instance=newBuddyAppModelLocator();21. 22. return_in
5、stance;23. 24. 25. 26. package com.ny.flex.cairngorm.model import com.ny.flex.cairngorm.vo.User; import mx.collections.ArrayCollection; Bindable public class BuddyAppModelLocator public var buddyList:ArrayCollection=new ArrayCollection(); public var loginUser:User=new User(); public var viewStackSel
6、ectedIndex :int = 0; static private var _instance:BuddyAppModelLocator=null; static public function getInstance():BuddyAppModelLocator if(_instance = null) _instance=new BuddyAppModelLocator(); return _instance; 在Model Locator代码中,定义了三个public的变量,buddyList:用来存放由数据库获取的密友列表;loginUser:定义一个User类型对象;viewSt
7、ackSelectedIndex:定义viewStack指向的视窗。几乎所有的服务层返回的信息都需要在Model Locator中有一个相应的对象。BuddyServiceLocator.mxml:Xml代码 1. 2. cairngorm:ServiceLocatorxmlns:mx=”xmlns:cairngorm=”3. 4. 5. 6. 7. cairngorm:ServiceLocator xmlns:mx=” xmlns:cairngorm=” 上述代码定义了程序将要调用的RemoteObject,RemoteObject所调用的Destination需要和remote_confi
8、g.xml文件中的Destination相一致。在此,Destination的值为“flexmvcRO”。BuddyListController.as: Xml代码 1. packagecom.ny.flex.cairngorm.control2. 3. importcom.adobe.cairngorm.control.FrontController;4. importmand.GetBuddyListCommand;5. importmand.LoginCommand;6. importcom.ny.flex.cairngorm.event.GetBuddyListEvent;7. imp
9、ortcom.ny.flex.cairngorm.event.LoginEvent;8. 9. publicclassBuddyListControllerextendsFrontController10. 11. publicfunctionBuddyListController()12. 13. super();14. addCommand(LoginEvent.LOGIN_EVENT,LoginCommand);15. addCommand(GetBuddyListEvent.GET_BUDDY_LIST_EVENT,16. GetBuddyListCommand);17. 18. 19
10、. 20. 21. package com.ny.flex.cairngorm.control import com.adobe.cairngorm.control.FrontController; import mand.GetBuddyListCommand; import mand.LoginCommand; import com.ny.flex.cairngorm.event.GetBuddyListEvent; import com.ny.flex.cairngorm.event.LoginEvent; public class BuddyListController extends
11、 FrontController public function BuddyListController() super(); addCommand(LoginEvent.LOGIN_EVENT,LoginCommand); addCommand(GetBuddyListEvent.GET_BUDDY_LIST_EVENT,GetBuddyListCommand); 很显然,上述的Controller代码是事件和命令的对应处理的地方。如何能将这些乱七八糟的东西结合在一起?其Magic的地方是在主页(Main application)上,代码如下:BuddList_Main_Cairngorm.
12、mxml:Xml代码 1. 2. 3. 4. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 现在用户可以建立视图组件,并从这些组件中播送事件:LoginView.mxml:Xml代码 1. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 每一个动作都需要建立一个相应的事件:LoginEvent.as:Xml代码 1. packagecom.ny.flex.cairngorm.event2. 3. importcom.adobe.cairngorm.c
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1