`
luhantu
  • 浏览: 204285 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

PureMVC 多模块通信 (PureMVC multi core)

 
阅读更多

项目中要用到 PureMVC 的多模块通信,就好好研究了一下这个框架。

下载:https://github.com/PureMVC/puremvc-as3-multicore-framework

网上的的教程比较多,而且也有官方的网站的demo,对我们来说真是好消息。

先来了解一些名词:

Junction 就是一个连接点,可以允许管道连接。

TeeSplit 就是一个分发消息装置。

TeeMeger就是一个接受消息装置。

Pipe 就是管道。它没有方向之分,只有跟那些消息装置连接后才会有方向。

 

那么现在开始干活吧。

第一步:在主APP初始化时候:

 

protected function application1_initializeHandler(event:FlexEvent):void
{
	junction.registerPipe(PipeAwareModule.APP_TO_MODULE_PIPE,Junction.OUTPUT,new TeeSplit());
	junction.registerPipe(PipeAwareModule.MODULE_TO_APP_PIPE,Junction.INPUT,new TeeMerge());
	junction.addPipeListener(PipeAwareModule.MODULE_TO_APP_PIPE,this,handlePipeMessage);
}

 

 这一步就是在APP上注册好分发,接受消息的装置,并侦听接受消息的装置。(参考First step 图片)

第二步:module的代码:

 

<?xml version="1.0" encoding="utf-8"?>
<mx:Module xmlns:fx="http://ns.adobe.com/mxml/2009" 
		   xmlns:s="library://ns.adobe.com/flex/spark"
		   implements="org.puremvc.as3.multicore.utilities.pipes.interfaces.IPipeAware"
		   xmlns:mx="library://ns.adobe.com/flex/mx" 
		   layout="horizontal" width="400" height="300"
		   name="module1">
	<fx:Declarations>
		<!-- Place non-visual elements (e.g., services, value objects) here -->
	</fx:Declarations>
	<fx:Script>
		<![CDATA[
			import com.model.constant.PipeAwareModule;
			
			import mx.events.FlexEvent;
			
			import org.puremvc.as3.multicore.utilities.pipes.interfaces.IPipeFitting;
			import org.puremvc.as3.multicore.utilities.pipes.interfaces.IPipeMessage;
			import org.puremvc.as3.multicore.utilities.pipes.messages.Message;
			import org.puremvc.as3.multicore.utilities.pipes.plumbing.Junction;
			import org.puremvc.as3.multicore.utilities.pipes.plumbing.Pipe;
			import org.puremvc.as3.multicore.utilities.pipes.plumbing.TeeMerge;
			import org.puremvc.as3.multicore.utilities.pipes.plumbing.TeeSplit;
			public var junction:Junction = new Junction();
			public function acceptInputPipe(name:String, pipe:IPipeFitting):void
			{
				if ( junction.registerPipe(name, Junction.INPUT, pipe)) 
				{
					junction.addPipeListener( name, this, handlePipeMessage );		
				}
			}
			
			public function acceptOutputPipe(name:String, pipe:IPipeFitting):void
			{
				junction.registerPipe( name, Junction.OUTPUT, pipe );
			}
			
			public function handlePipeMessage(message:IPipeMessage):void
			{
				switch (message.getType())
				{
					case PipeAwareModule.SHELL_MESSAGE:
					{
						text.text = message.getBody() as String;
						break;
					}
				}
			}
			
			protected function btn_clickHandler(event:MouseEvent):void
			{
				var msg:Message = new Message(PipeAwareModule.MODULE_MESSAGE,null,"Hi,I am from Module");
				junction.sendMessage(PipeAwareModule.MODULE_TO_APP_PIPE,msg);
			}
			
		]]>
	</fx:Script>
	<mx:Text id="text" text=""/>
	<s:Button id="btn" label="send" click="btn_clickHandler(event)"/>
</mx:Module>
 

在module 中你要实现org.puremvc.as3.multicore.utilities.pipes.interfaces.IPipeAware 接口,并在接受消息的管道处侦听到来的消息。

第三部:在APP中生成管道并连接APP 和 Module。

 

<mx:ModuleLoader url="ModuleApp.swf" ready="moduleloader1_readyHandler(event)"/>

 private var moduleApp:IPipeAware;

 

protected function moduleloader1_readyHandler(event:ModuleEvent):void
{
	var child:Module = event.target.child as Module;
	child.addEventListener(FlexEvent.INITIALIZE,onModuleInitialize);
}

private function onModuleInitialize(event:FlexEvent):void
{
	moduleApp = event.target as IPipeAware;
	registerJunction();
}


private function registerJunction():void
{
	var moduleToAppPipe:Pipe = new Pipe();
	moduleApp.acceptOutputPipe(PipeAwareModule.MODULE_TO_APP_PIPE,moduleToAppPipe);
	
	var appIn:TeeMerge = junction.retrievePipe(PipeAwareModule.MODULE_TO_APP_PIPE) as TeeMerge;
	appIn.connectInput(moduleToAppPipe);
	
	var appToModulePipe:Pipe = new Pipe();
	moduleApp.acceptInputPipe(PipeAwareModule.APP_TO_MODULE_PIPE,appToModulePipe);
	
	var appOut:TeeSplit = junction.retrievePipe(PipeAwareModule.APP_TO_MODULE_PIPE) as TeeSplit;
	appOut.connect(appToModulePipe);
}

 在这一步,建立管道并且分别连接APP和Module。(参见 Second Step)

第四步:APP发送消息,测试。

 

 

<s:Button label="Send to module" click="button1_clickHandler(event)"/>

 protected function button1_clickHandler(event:MouseEvent):void

{
	var msg:Message = new Message(PipeAwareModule.SHELL_MESSAGE,null,"Hi,I am Form App");
	junction.sendMessage(PipeAwareModule.APP_TO_MODULE_PIPE,msg);
}
 

至此,APP - Module和 Module - APP已经可以互相发送消息了。

 

如果有多个Module,只要在app junction 上再注册TeeSplit 和 TeeMeger(用不同的名字),然后用不同的管道连接起来app 和 module 就可以了。

然后你可以通过app 中转来实现module 和 module 之间的通信。这里就不在多说了,我会把源文件贴到附件中,可以下载下来看看。

 

 

 

  • 大小: 200.3 KB
  • 大小: 15 KB
  • 大小: 31.6 KB
分享到:
评论

相关推荐

    PureMVC 中文版

    PureMVC 提供了一种模块化、结构化的开发方式,帮助开发者更好地组织代码,提高可维护性和复用性。 描述 "Flex framework,又一个新的flex界面框架" 暗示PureMVC 是与Adobe Flex相关的,Flex是用于创建交互式、高...

    可以运行的puremvc的登陆实例.

    5. **模块(Module)**:PureMVC支持模块化开发,允许你将应用划分为多个独立的模块,每个模块都有自己的模型、视图和控制器。在登录实例中,可能定义了一个专门处理登录逻辑的模块。 6. **代码结构**:在提供的...

    PureMVC C#框架

    7. **模块化设计**:PureMVC支持模块化开发,通过`IFacade`接口可以创建多个独立的模块,每个模块都有自己的MVC组件,从而实现复杂应用程序的分层结构。 8. **适配器模式**:PureMVC鼓励使用适配器模式来连接框架...

    PureMVC总结(附Hello World含PureMVC源码代码和文档)

    4. **模块化设计**:PureMVC支持多模块架构,如何创建和管理多个独立的MVC子系统。 5. **应用场景与最佳实践**:PureMVC在实际项目中的使用场景,以及如何优化和扩展框架。 6. **Hello World示例**:通常会通过一...

    puremvc开发指南

    标题 "PureMvc 开发指南" 指向的是一个关于 PureMVC 框架的教程或参考材料,这是一款广泛应用在多个平台上的轻量级、模块化、面向切面编程(AOP)的设计模式框架。PureMVC 提供了一种结构化的解决方案,帮助开发者在...

    Lua实现PureMVC

    这个是一个根据AS3(ActionScript 3) pureMVC而转换过来的lua pureMVC。所有的接口完全跟AS3版本一致。 若是想使用,可以直接查看网上的pureMVC 文档,我并未对任何一个函数改名或者更换参数位置。 注意,这个PureMVC...

    PureMVC.rar

    本压缩包"PureMVC.rar"提供了PureMVC在C#平台上的实现,包括单线程版和多线程版,适用于Unity开发或其他C#项目。 首先,我们来深入理解PureMVC的核心概念和架构: 1. **模型(Model)**:模型层负责应用程序的数据...

    Unity 专用 pureMVC

    PureMVC是面向对象的多层应用程序框架,它提供了一种模式来组织代码,使开发更加规范和高效。本篇文章将深入探讨Unity中如何使用PureMVC框架,以及它如何帮助实现UI和逻辑的分离。 PureMVC是一个轻量级的框架,其...

    pureMVC资料包

    1. **模块化**:PureMVC提供了一种方式来组织应用程序为多个独立的模块,每个模块都有自己的MVC组件,可以独立地开发和测试。 2. **非侵入式**:PureMVC的组件并不直接依赖于应用程序的业务逻辑,而是通过消息传递...

    pureMVC_AS3

    在AS3版本中,PureMVC为ActionScript 3.0开发者提供了强大的工具,帮助他们构建模块化、可维护性强的应用程序。 **MVC设计模式** MVC模式是软件工程中的一种架构模式,将应用程序分为三个核心部分:模型(Model)...

    PureMVC_CSharp.zip_csharp_pureMVC_pureMVC C_pureMVC C#_疯铮铮

    PureMVC框架的亮点在于其强大的模块化机制,通过MacroCommand、SimpleCommand、Proxy、Mediator和Notification等抽象类,开发者可以快速地构建可复用的组件,同时保持良好的代码结构。此外,它的非侵入性设计使得...

    一个很好的puremvc实例

    描述部分由于被省略,我们可以假设这个实例可能包含了如何组织代码、定义模型、视图和控制器组件,以及如何利用PureMVC的多模块系统来提高可扩展性和可维护性。PureMVC的核心组件包括:MacroCommand、Command、...

    PureMvc实例 PureMvc第一个实例

    5. **通知(Notifications)**:PureMvc使用`Notification`对象作为不同层间通信的载体,例如`LOGIN_REQUEST`和`LOGIN_SUCCESS`通知分别用于触发登录和通知登录结果。 6. **门面(Facade)**:作为全局的单一访问点...

    基于PureMVC框架实现的Qt的一个例子

    3. **代理模式**:在PureMVC中,Proxy类用于管理应用程序的共享数据或服务,它可以方便地在多个组件之间共享和通信。 **Qt集成PureMVC** Qt是一个跨平台的C++库,用于开发图形用户界面和其他应用程序。结合PureMVC...

    pureMVC源代码

    1. **Multiton**:PureMVC引入了多实例(Multiton)模式,意味着每个`Model`、`View`和`Controller`都是全局唯一的,可以通过单例访问。 2. **Notifications**:PureMVC使用`Notification`作为组件间通信的机制,它...

    PureMVC_study

    PureMVC的核心理念是通过分离业务逻辑、用户界面和应用程序数据,使得代码更加模块化,易于维护和扩展。 一、PureMVC概述 1. MVC模式:MVC是一种软件设计模式,将应用程序分为三个核心部分:模型(Model)、视图...

    PureMVC C++架构代码

    PureMVC是一个多范式、轻量级的框架,它主要设计用于构建应用程序的模型-视图-控制器(MVC)结构。这个框架的核心理念是将应用程序的不同部分解耦,以便于开发、维护和扩展。在C++版本的PureMVC中,它充分利用了面向...

    pureMVC Demo C#

    此外,C#的事件系统与PureMVC的通知机制相结合,使得组件间的通信更加便捷。 **3. PureMVC Demo结构** “PureMVCDemo”可能包含以下部分: - **启动类(Startup)**:初始化PureMVC的基础设施,注册全局的观察者。 ...

    pureMVC multicore 多核版本 源码

    多核版本的PureMVC,如“pureMVC_AS3_MultiCore”,是为了应对更复杂的项目需求,特别是在多线程或分布式环境中的应用。这个版本的PureMVC允许开发者将应用程序分解成多个独立的子系统,每个子系统都可以运行在不同...

Global site tag (gtag.js) - Google Analytics