Flex 开发架构(四): 去除FrontController 的Cairngorm

本文介绍了一种简化Cairngorm框架的方法,通过移除FrontController并引入ServiceFaçade来直接处理视图请求,减少代码量并提高开发效率。

正如在使用Cairngorm时,视图中的每一个动作都播送一个事件,每个播送出去的事件都需要建立相应的命令代码来处理事件。并且需要在FrontController中对应他们的关系。例如下面的简单流程:

Loginvew.xml —> action login() —>dispatch LoginEvent —>Handled by LoginCommand —>mapping LoginEvent and LoginCommand in FrontController.

在不考虑商务层代码的情况下,当用户建立然后新的动作时,就需要建立2个新的代码,修改Controller代码。

那么如何简化Cairngorm,我的方法是去掉FrontController,取而代之的是Service Façade,其框架图如下所示:

 

 

在上图中,视图不再播送如何事件,而是直接调用Service Façade。而Service Façade则直接调用商务委托层与服务器端通讯(如Remote Object等),然后商务委托处理结果并更新Model Locator,最后Model Locator通过绑定(Binding)更新视窗中的结果。

 

看一下被改变的代码:

ServiceFacade.as:

 

package com.ny.flex.cairngorm.no_fc.service
{
	import com.ny.flex.cairngorm.no_fc.vo.User;
	
	public class ServiceFacade
	{
		private static var _serviceFacade:ServiceFacade = null;
		
		public function ServiceFacade(privateClass:PrivateClass)
		{
			if(ServiceFacade._serviceFacade == null){
				ServiceFacade._serviceFacade = this;
			}
		}
		public static function getInstance():ServiceFacade {
			if(_serviceFacade == null){
				_serviceFacade = new ServiceFacade(new PrivateClass);
			}
			return _serviceFacade;
		}
		
		public function authenticate(user:User):void{
			LoginDelegate.getInstance().authenticate(user);
		}
		public function  getBuddyList():void{
			BuddyListDelegate.getInstance().getBuddyList();
		}
	}
}

class  PrivateClass{}

  

ServiceFacade提供了对所有商务逻辑为一体的界面,视窗的行为(Action)仅仅调用façade,例如下面代码中的Login的动作。

Loginvew.xml :

 

	private function login():void{
			if(Validator.validateAll(validators).length == 0){
				var loginUser:User = new User();
				loginUser.userName=username.text;
				loginUser.password=password.text;
				serviceFacade.authenticate(loginUser);
			}   
		}

 

函数 serviceFacade.authenticate(loginUser)如下:

 

		public function authenticate(user:User):void{
			LoginDelegate.getInstance().authenticate(user);
		}

  

ServiceFacade使用LoginDelegate 来真正实现Business Logic:

 

 

 LoginDelegate.as:

 

package com.ny.flex.cairngorm.no_fc.service
{
	import com.ny.flex.cairngorm.no_fc.*;
	import com.ny.flex.cairngorm.no_fc.vo.User;
	
	import mx.rpc.IResponder;
	import mx.rpc.Responder;
	import mx.rpc.events.ResultEvent;
	
	public class LoginDelegate extends BaseDelegate 
	{
		private static  var _loginDelegate:LoginDelegate = null;
		
		public function LoginDelegate(privateClass:PrivateClass){
			if(LoginDelegate._loginDelegate == null ){
				LoginDelegate._loginDelegate = this;
			}
		
		}
		
		public  static function  getInstance():LoginDelegate{
			if(_loginDelegate == null){
				_loginDelegate = new LoginDelegate(new PrivateClass);
			}
			return  _loginDelegate;
		}
		
		public function  authenticate(user:User):void{
			var responder:IResponder = new Responder(onResult_Authenticate,fault);
			var call:Object = service.authenticate(user);
			call.addResponder(responder);
		}
		
		private function onResult_Authenticate(event:ResultEvent):void{
			var authUser:User = event.result as User;
			model.loginUser = authUser;
			model.viewStackSelectedIndex = 1;
		}
	
	}
}

class PrivateClass{}

  

 

上面的authenticate(user) 实现于后台通讯并处理结果,更新Model Locator

 

其他的视图和相应的处理方法 与上面类似。

 

 

这个解决方案简化了Cairngorm的框架,使得代码更易于理解。而且,彻底摆脱了 无味的dispatcher,frontcontroller 和command。 编码效率会提高 并且易于调试。

 

但其弱点是显而易见的:它违犯了解耦的(就是使得设计程序耦合性尽可能的降低)设计规范,使得界面上的行为(Action)和Serivce Façade产生了耦合关系。

 

在最后一篇中我将讨论下一个Flex 开发的热点:Mate-标签化的框架。

 

 

 

 

内容概要:本文系统介绍了算术优化算法(AOA)的基本原理、核心思想及Python实现方法,并通过图像分割的实际案例展示了其应用价值。AOA是一种基于种群的元启发式算法,其核心思想来源于则运算,利用乘除运算进行全局勘探,加减运算进行局部开发,通过数学优化器加速函数(MOA)和数学优化概率(MOP)动态控制搜索过程,在全局探索与局部开发之间实现平衡。文章详细解析了算法的初始化、勘探与开发阶段的更新策略,并提供了完整的Python代码实现,结合Rastrigin函数进行测试验证。进一步地,以Flask框架搭建前后端分离系统,将AOA应用于图像分割任务,展示了其在实际工程中的可行性与高效性。最后,通过收敛速度、寻优精度等指标评估算法性能,并提出自适应参数调整、模型优化和并行计算等改进策略。; 适合人群:具备一定Python编程基础和优化算法基础知识的高校学生、科研人员及工程技术人员,尤其适合从事人工智能、图像处理、智能优化等领域的从业者;; 使用场景及目标:①理解元启发式算法的设计思想与实现机制;②掌握AOA在函数优化、图像分割等实际问题中的建模与求解方法;③学习如何将优化算法集成到Web系统中实现工程化应用;④为算法性能评估与改进提供实践参考; 阅读建议:建议读者结合代码逐行调试,深入理解算法流程中MOA与MOP的作用机制,尝试在不同测试函数上运行算法以观察性能差异,并可进一步扩展图像分割模块,引入更复杂的预处理或后处理技术以提升分割效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值