项目中要用到 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 提供了一种模块化、结构化的开发方式,帮助开发者更好地组织代码,提高可维护性和复用性。 描述 "Flex framework,又一个新的flex界面框架" 暗示PureMVC 是与Adobe Flex相关的,Flex是用于创建交互式、高...
5. **模块(Module)**:PureMVC支持模块化开发,允许你将应用划分为多个独立的模块,每个模块都有自己的模型、视图和控制器。在登录实例中,可能定义了一个专门处理登录逻辑的模块。 6. **代码结构**:在提供的...
7. **模块化设计**:PureMVC支持模块化开发,通过`IFacade`接口可以创建多个独立的模块,每个模块都有自己的MVC组件,从而实现复杂应用程序的分层结构。 8. **适配器模式**:PureMVC鼓励使用适配器模式来连接框架...
4. **模块化设计**:PureMVC支持多模块架构,如何创建和管理多个独立的MVC子系统。 5. **应用场景与最佳实践**:PureMVC在实际项目中的使用场景,以及如何优化和扩展框架。 6. **Hello World示例**:通常会通过一...
标题 "PureMvc 开发指南" 指向的是一个关于 PureMVC 框架的教程或参考材料,这是一款广泛应用在多个平台上的轻量级、模块化、面向切面编程(AOP)的设计模式框架。PureMVC 提供了一种结构化的解决方案,帮助开发者在...
这个是一个根据AS3(ActionScript 3) pureMVC而转换过来的lua pureMVC。所有的接口完全跟AS3版本一致。 若是想使用,可以直接查看网上的pureMVC 文档,我并未对任何一个函数改名或者更换参数位置。 注意,这个PureMVC...
本压缩包"PureMVC.rar"提供了PureMVC在C#平台上的实现,包括单线程版和多线程版,适用于Unity开发或其他C#项目。 首先,我们来深入理解PureMVC的核心概念和架构: 1. **模型(Model)**:模型层负责应用程序的数据...
PureMVC是面向对象的多层应用程序框架,它提供了一种模式来组织代码,使开发更加规范和高效。本篇文章将深入探讨Unity中如何使用PureMVC框架,以及它如何帮助实现UI和逻辑的分离。 PureMVC是一个轻量级的框架,其...
1. **模块化**:PureMVC提供了一种方式来组织应用程序为多个独立的模块,每个模块都有自己的MVC组件,可以独立地开发和测试。 2. **非侵入式**:PureMVC的组件并不直接依赖于应用程序的业务逻辑,而是通过消息传递...
在AS3版本中,PureMVC为ActionScript 3.0开发者提供了强大的工具,帮助他们构建模块化、可维护性强的应用程序。 **MVC设计模式** MVC模式是软件工程中的一种架构模式,将应用程序分为三个核心部分:模型(Model)...
PureMVC框架的亮点在于其强大的模块化机制,通过MacroCommand、SimpleCommand、Proxy、Mediator和Notification等抽象类,开发者可以快速地构建可复用的组件,同时保持良好的代码结构。此外,它的非侵入性设计使得...
描述部分由于被省略,我们可以假设这个实例可能包含了如何组织代码、定义模型、视图和控制器组件,以及如何利用PureMVC的多模块系统来提高可扩展性和可维护性。PureMVC的核心组件包括:MacroCommand、Command、...
5. **通知(Notifications)**:PureMvc使用`Notification`对象作为不同层间通信的载体,例如`LOGIN_REQUEST`和`LOGIN_SUCCESS`通知分别用于触发登录和通知登录结果。 6. **门面(Facade)**:作为全局的单一访问点...
3. **代理模式**:在PureMVC中,Proxy类用于管理应用程序的共享数据或服务,它可以方便地在多个组件之间共享和通信。 **Qt集成PureMVC** Qt是一个跨平台的C++库,用于开发图形用户界面和其他应用程序。结合PureMVC...
1. **Multiton**:PureMVC引入了多实例(Multiton)模式,意味着每个`Model`、`View`和`Controller`都是全局唯一的,可以通过单例访问。 2. **Notifications**:PureMVC使用`Notification`作为组件间通信的机制,它...
PureMVC的核心理念是通过分离业务逻辑、用户界面和应用程序数据,使得代码更加模块化,易于维护和扩展。 一、PureMVC概述 1. MVC模式:MVC是一种软件设计模式,将应用程序分为三个核心部分:模型(Model)、视图...
PureMVC是一个多范式、轻量级的框架,它主要设计用于构建应用程序的模型-视图-控制器(MVC)结构。这个框架的核心理念是将应用程序的不同部分解耦,以便于开发、维护和扩展。在C++版本的PureMVC中,它充分利用了面向...
此外,C#的事件系统与PureMVC的通知机制相结合,使得组件间的通信更加便捷。 **3. PureMVC Demo结构** “PureMVCDemo”可能包含以下部分: - **启动类(Startup)**:初始化PureMVC的基础设施,注册全局的观察者。 ...
多核版本的PureMVC,如“pureMVC_AS3_MultiCore”,是为了应对更复杂的项目需求,特别是在多线程或分布式环境中的应用。这个版本的PureMVC允许开发者将应用程序分解成多个独立的子系统,每个子系统都可以运行在不同...