`
vyyv
  • 浏览: 17602 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

网络相册开发(8)——Cairngorm 架构浅析

    博客分类:
  • Flex
阅读更多

Cairngorm是Adobe公司推荐的Flex架构。

关于它的文档少的可怜,我只发现了这两个:

Cairngorm中文文档

Developing Flex RIAs with Cairngorm microarchitecture

 

Cairngorm 架构包括六部分:Model Locator(共享数据),View(视图),Front Controller(前端控制器),Command (命令),Delegate(委托),Service(服务)。还有两个基础模块VO(数据对象),Event(事件)

 

Cairngorm流程大致如下:界面由View组成,View绑定Model Locater中的数据。客户在View中操作产生Event,Event被Front Controller所监听。Front Controller把Event绑定到Command,Command处理业务,创建Delegate,Delegate调用Service,Service远程访问Java。Java返回数据被Command得到并处理,更新Model Locater,View因为和Model Locater数据绑定,也会自动更新。详情见Cairngorm中文文档

 

这是我Flex代码的结构

 

 

VO

一般与服务器中domain里的对象一一映射。

需要注意的是转换时,数据类型的对应关系。

可参考转换表

BaseVO.as

package  net.sw.album.vo
{
	import com.adobe.cairngorm.vo.IValueObject;
	
	public class BaseVO implements IValueObject
	{
		[Bindable]
		public var id:Number;
		[Bindable]
		public var name:String;
		[Bindable]
		public var description:String;
		[Bindable]
		public var createtime:Date;
		
				
	}
}

 AlbumVO.as

package net.sw.album.vo
{
	[RemoteClass(alias="net.sw.album.domain.Album")]
	public class AlbumVO extends BaseVO
	{
		[Bindable]
		public var owner_id:Number;
		[Bindable]
		public var authority:int;
	}
}

  

Model Locater

储存所有界面共享的数据,有点象session,不同的是保存在客户端

model locater采用的是单例模式

AlbumModelLocater.as

package net.sw.album.model
{
	import mx.collections.ArrayCollection;
		[Bindable] 
	public class AlbumModelLocater
	{
		
		private static var albumModelLocater:AlbumModelLocater;
		
		public static const MYALBUMSTATE:String="myAlbumState";

		public var ownerId:Number=1;
		public var albumId:Number;
		public var myAlbums:ArrayCollection;
		public var myFriends:ArrayCollection;
		public var picturesAC:ArrayCollection;
		...... .....

		public static function getInstance():AlbumModelLocater {
        	if(albumModelLocater == null) {
            	albumModelLocater = new AlbumModelLocater();
            }
            return albumModelLocater;
        }

	}
}

 Front Controller

负责接收Event,并把Event和Command联系起来

AlbumController.as

package net.sw.album.controller
{
	import com.adobe.cairngorm.control.FrontController;
	import net.sw.album.command.*;
	import net.sw.album.event.menuItemClickEvent.*;
	import net.sw.album.event.*;	
	
	import net.sw.album.model.AlbumModelLocater;


	public class AlbumController extends FrontController
	{
		public function AlbumController()
		{
			initialiseCommands();
		}
		
		public function initialiseCommands() : void
		{
			addCommand(DisplayMyAlbumEvent.EVENT_DISPLAY_MYALBUM,DisplayMyAlbumCommand);
			addCommand(AddAlbumEvent.EVENT_ADD_ALBUM,AddAlbumCommand);
			addCommand(ShowPhotoTileEvent.EVENT_SHOW_PHOTOTILE,ShowPhotoTileCommand);
                                               ......  .......
		}
		
	}
}

 

Delegate

都是结构化的东西,复制粘贴改几行代码就成了

AlbumDelegate.as

package net.sw.album.business
{
	
	import com.adobe.cairngorm.business.ServiceLocator;
	
	import mx.rpc.IResponder;
	import mx.rpc.remoting.RemoteObject;
	
	import net.sw.album.vo.AlbumVO;
        
	public class AlbumDelegate
	{
		private var responder : IResponder;
        private var service : RemoteObject;
               
		public function AlbumDelegate(responder : IResponder )
		{
			this.service = ServiceLocator.getInstance().getRemoteObject( "albumService" );
            this.responder = responder;
		}
		
		public function findAlbumsByUserID() : void
        {                      
            var call : Object = service.getAll();
            call.addResponder( responder );
        }
        
        public function addAlbum(album:AlbumVO):void
        {
        	 var call : Object = service.saveAlbum(album);
            call.addResponder( responder );
        }
               

	}
}

 Service

定义远程过程调用,这里使用的是RemoteObject

Services.mxml

<?xml version="1.0" encoding="utf-8"?>
<!--
	@version $Revision: 1.1 $
-->
<cairngorm:ServiceLocator
	xmlns:mx="http://www.adobe.com/2006/mxml" 
	xmlns:cairngorm="http://www.adobe.com/2006/cairngorm">

    <mx:RemoteObject id="albumService" destination="AlbumManager"
							showBusyCursor="true">
    </mx:RemoteObject>
    
     <mx:RemoteObject id="photoService" destination="PhotoManager"
							showBusyCursor="true">
    </mx:RemoteObject>
  

</cairngorm:ServiceLocator>

 

  • 大小: 18.2 KB
  • 大小: 14.6 KB
分享到:
评论
1 楼 foodyi 2009-03-27  
我自己用air写一个桌面应用程序,起初用这个框架写了1个模块 感觉太繁琐了
让我十分不爽 直接给放弃了~


相关推荐

    FLEX做的一个抽奖效果(cairngorm架构)

    总的来说,"FLEX做的一个抽奖效果(cairngorm架构)"项目是一个结合了FLEX开发技术和cairngorm架构的实战案例,对于想要提升FLEX编程技能和理解MVC设计模式的开发者来说,是一份宝贵的参考资料。通过深入研究和解构...

    FLEX资源——《Cairngorm中文版》官方的FLEX框架

    《Cairngorm中文版》官方的FLEX框架是一份重要的资源,对于深入理解Adobe Flex应用开发中的架构设计有着极大的帮助。Flex是一个基于MXML和ActionScript的开源框架,用于构建富互联网应用程序(RIA)。而Cairngorm是...

    Flex轻量级开发框架-Cairngorm介绍

    ### Flex轻量级开发框架——Cairngorm详细介绍 #### 一、引言 随着RIA(Rich Internet Applications)技术的发展,Flex作为一种强大的客户端技术,在构建交互丰富的应用方面展现了其独特的优势。为了更好地组织代码...

    Flex开发框架cairngorm入门实例教程

    Cairngorm是一个轻量级的MVC框架,专门用于Adobe Flex应用程序的开发。这个框架的设计目的是为了提高Flex项目的可维护性和可扩展性,通过分离业务逻辑、视图和控制层,使得代码更加模块化。在Cairngorm中,模型...

    Cairngorm开发文档中文版

    Cairngorm由Adobe开源社区推出,旨在为开发人员提供一套组织和管理代码的规范,使他们能更有效地开发复杂的富互联网应用程序(RIA)。 **Cairngorm的核心组件:** 1. **模型(Model)**:模型层是应用的数据存储和...

    flex Cairngorm ,FABridgeDemo

    标题 "flex Cairngorm ,FABridgeDemo" 暗示了我们正在讨论的是Adobe Flex框架中的两个关键组件——Cairngorm微架构和FABridge。这些是用于构建富互联网应用程序(RIA)的重要工具,特别是在ActionScript 3中。 ...

    Cairngorm例子

    在Flex开发中,Cairngorm框架提供了一种组织应用程序逻辑的方式,它强调了分离关注点,使得业务逻辑、用户界面和数据管理可以独立地进行设计和测试。MVC模式的核心在于将应用的各个部分划分清晰,模型负责处理数据,...

    flex开发系列书籍:Cairngorm_MVC_框架

    Cairngorm 框架是 Adobe Flex 开发中的一个著名模型-视图-控制器(MVC)架构,它提供了一种结构化的方法来组织和管理应用程序代码,从而提高开发效率和代码可维护性。该框架的核心思想是将应用程序的不同部分——...

    Cairngorm 开发文档中文版

    Cairngorm是一种轻量级的MVC(Model-View-Controller)框架,主要用于Adobe Flex和ActionScript 3.0应用程序的开发。这个框架旨在帮助开发者实现可维护、可扩展和可重用的代码,提高开发效率并促进团队协作。中文版...

    Flex开发框架cairngorm入门实例教程.rar

    Flex开发框架Cairngorm是Adobe Flex应用中的一个轻...学习Cairngorm不仅可以提升你的Flex开发技能,还能让你更好地理解软件设计模式和企业级应用架构,这对任何希望在RIA开发领域深入发展的开发者来说都是宝贵的财富。

    flex Cairngorm 开发文档中文版.pdf

    Flex Cairngorm框架是Adobe Flex开发中的一个著名轻量级MVC框架,它为构建大型、可维护的Flex应用程序提供了结构和指导。这份"flex Cairngorm 开发文档中文版.pdf"是开发者们理解并掌握Cairngorm框架的重要参考资料...

    Cairngorm.swc+Cairngorm+开发文档中文版.rar 套装

    这个“Cairngorm.swc+Cairngorm+开发文档中文版.rar”套装提供了一个完整的Cairngorm框架,以及相关的中文开发文档,对于初学者和经验丰富的开发者来说都是一个宝贵的资源。 Cairngorm的核心设计理念是基于Model-...

    Cairngorm框架配置

    Cairngorm是一种专门为Adobe Flex设计的模型-视图-控制器(Model-View-Controller, MVC)架构模式框架。它通过清晰地分离应用逻辑,使得开发更加模块化、可维护性强,并且能够很好地与后端服务进行交互。 ##### 1.1 ...

    cairngorm中文版

    Cairngorm框架是Adobe Flex开发中的一个核心MVC(Model-View-Controller)框架,它为构建可扩展、可维护的富互联网应用程序(RIA)提供了一种结构化的方法。Flex是一种基于ActionScript 3.0的开发工具,用于创建在...

Global site tag (gtag.js) - Google Analytics