`
wolfsquare
  • 浏览: 84223 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

基于事件分发机制的企业应用开发

阅读更多

    做过DOS编程的人都知道,Dos编程和Window编程最大不同之一就是事件机制的编程,普遍的,目前事件机制的使用已经在Windows下的应用程序中遍地开花了,可是基于事件传播的应用仅仅限于window应用程序吗?答案是:不。
    在IOC概念的不断冲击下,我们需要回头去审视前两年自己开发的,心中为之骄傲的,认为非常优秀的程序,在这过程中,我们就会看到这些骄傲在最新的概念冲击下烟消云散了。变成了丑陋的,紧耦合的反面范例。让我们来看看以下场景:

 某公司有基于某平台的两子系统,订购系统A和财务系统B。当采购员在预采购某物品前,先在定购系统A中登记需要购买的货物和价格,然后财务系统B就开始该笔购物款项的申请流程。
 首先让我们来看看两年前的代码是怎么实现的:

 

public class OrderService {
   
private FinancialService  financialService=new FinancialServiceImpl();
     
public Order saveOrder(Order order){
  。。。。处理订单
                financialService.createRequestOfMoney(order.getAmount());
   }

 }


从上面的代码中可以很明显看到,定购系统A和财务子系统发生了耦合,也许有同志说,那我采用Spring等IOC框架来解耦:
 

public class OrderService {
   
private FinancialService  financialService;
   
public void setFinancialService(FinancialService fs){
     
this.financialService=fs;
   }

     
public Order saveOrder(Order order){
  。。。。处理订单
                financialService.createRequestOfMoney(order.getAmount());
   }

 }


财务子系统B的实现FinancialServiceImpl是通过Spring等IOC框架设置进去的。这样不是很完美了吗?

但是我仍然要说,这个只是五十步笑百步罢了。再请看以下场景:该公司的业务规则起了变化,金额少于1万元的定购不需要通过财务申请流程。这样财务子系统B升级到B2了,多了一个直接拨款的API payMoney()。这时候,定购系统该怎么办?除了修改代码没有别的办法。这个时候,基于事件分发处理的机制就大派用场了。
  修改原来的订单系统实现下单消息的广播。
 

public class OrderService extend EventBrocast{
   
private FinancialService  financialService=new FinancialServiceImpl();
     
public Order saveOrder(Order order){
  。。。。处理订单
                brocastEvent(
new Event(order)); // ***
   }

 }

 

 实现一个消息监听器:

public OrderEventListener implements EventListener{
  
public void performed(Event e){
   Order order 
=(Order) e.getObject();
    financialService.createRequestOfMoney(order.getAmount());
  }

 }

 

 在配置中设置(这里我们使用的是Spring)
 <bean id="orderService" ...>
  <property name="eventListener">
   <list>
    <ref local="orderListener"/>
   </list>
  </property>
 </bean>
 <bean id="orderListener" ...>

 这样我们就实现了订单系统和财务系统的解耦,如果财务系统发生的修改,我们就只需实现新的监听器就可以了:

 

public  NewOrderEventListener implements EventListener{
    
private FinancialService  financialService;
    
public void setFinancialService(FinancialService fs){
     
this.financialService=fs;
   }


  
public void performed(Event e){
   Order order 
=(Order) e.getObject();
    financialService.payMoney(order.getAmount());
  }

 }

 

 下一篇文章,我将引入AOP的概念来将系统提高到更高的抽象层次。
 (全文完)

分享到:
评论

相关推荐

    view的事件分发机制demo2

    本文将深入探讨"view的事件分发机制demo2",并基于链接提供的详细讲解进行总结。 Android事件分发机制主要包括三个步骤: DispatchTouchEvent(事件传递)、onInterceptTouchEvent(拦截事件)和onTouchEvent(处理...

    Android事件分发机制全解析Demo

    在Android开发中,事件分发机制是至关重要的一个部分,它决定了用户与界面交互时,事件如何在不同的组件之间传递和处理。本文将基于“Android事件分发机制全解析Demo”进行深入探讨,并通过实际的代码示例来帮助你更...

    android事件分发机制学习代码二

    在Android开发中,事件分发机制是至关重要的一个部分,它决定了用户与应用程序交互时,事件如何在View、 ViewGroup及Activity之间传递。本篇将基于"android事件分发机制学习代码二"的示例,深入解析Android事件分发...

    基于事件分发机制实现listview顶部悬浮效果

    标题"基于事件分发机制实现listview顶部悬浮效果"表明我们要讨论的是如何利用Android的事件分发机制来达成这一目标。事件分发机制是Android系统处理触摸事件的核心流程,包括了三个步骤: DispatchTouchEvent、...

    android事件分发机制窗帘效果

    在Android开发中,事件分发机制是用户交互的基础,它决定了屏幕上的触摸事件如何被不同的View组件接收和处理。窗帘效果是一种独特的动画效果,通常用于界面的展开和收起,给用户带来新颖的视觉体验。本文将深入探讨...

    事件分发_C#_事件分发_serious791_

    在本篇中,我们将深入探讨C#中的事件分发机制,并通过一个名为"demoTest"的示例项目来阐述其工作原理。 首先,事件分发的基础是委托(Delegate),它是C#中的一种类型,代表了一组方法的签名。委托可以被用来存储对...

    基于事件分发实现listview顶部悬浮

    总之,实现“基于事件分发的listview顶部悬浮”需要深入理解Android的事件分发机制,以及如何在ListView中自定义Adapter和头部视图。通过重写相关触摸事件处理方法,并配合适当的动画,我们可以创建出具有悬浮头部...

    仿ViewPager,事件分发应用

    标题中的“仿ViewPager”...总的来说,这个主题涉及了Android开发中的高级概念,包括自定义ViewGroup、事件分发机制以及可能的手势识别。对于希望深入了解Android UI开发的开发者来说,这是一个非常有价值的案例研究。

    基于STM32的事件驱动框架的应用

    《基于STM32的事件驱动框架的应用》这篇文章探讨了如何改善传统嵌入式单片机开发中的问题,提出了一种采用事件驱动型层次式状态机的 QuantumPlatform 量子框架与STM32单片机结合的解决方案。STM32,全称基于ARM ...

    安卓listview相关相关-基于事件分发实现listview顶部悬浮.zip

    本资源"安卓listview相关相关-基于事件分发实现listview顶部悬浮.zip"主要探讨如何利用事件分发机制来实现ListView的顶部悬浮效果。这个效果通常指的是在用户滚动ListView时,某一部分视图(如广告栏或搜索框)始终...

    ViewPager事件分发及嵌套冲突处理

    Android的事件分发机制基于"触摸事件序列"的概念,包括ACTION_DOWN、ACTION_MOVE、ACTION_UP和ACTION_CANCEL等。事件首先由ViewGroup接收到,然后通过`onInterceptTouchEvent()`方法决定是否拦截并处理该事件,还是...

    使用SSM框架开发企业级应用

    SSM框架,全称为Spring、SpringMVC和MyBatis的组合,是Java后端开发中常用的企业级应用开发框架。这个项目展示了如何将这三个组件有效地整合在一起,以构建一个功能丰富的Web应用。下面,我们将深入探讨SSM框架的...

    基于Symbian OS 的手机开发与应用 光盘源码

    这份源码集合提供了深入学习和实践Symbian OS开发的实例,对于想要了解或提升Symbian平台应用开发技能的开发者来说极具价值。 Symbian OS是一个微内核的实时操作系统,设计用于资源受限但功能强大的移动设备。它的...

    鸿蒙生态应用开发白皮书V2.0.pdf

    《鸿蒙生态应用开发白皮书V2.0》详细阐述了华为鸿蒙生态在万物互联时代的应用开发理念、核心技术及挑战。鸿蒙系统旨在解决传统移动互联网向全场景智能时代的过渡问题,提供统一的生态基础,实现跨设备的无缝体验。 ...

    Android事件处理机制ViewGroup的事件传递

    在Android开发中,事件处理是用户界面交互的关键部分。Android事件处理机制主要涉及三类对象:事件(Event)、事件源...通过深入学习和实践,开发者可以利用事件分发机制实现各种复杂交互效果,提升应用的用户体验。

    鸿蒙生态应用开发白皮书V2.0-240407.zip

    《鸿蒙生态应用开发白皮书V2.0-240407》是一部深入探讨华为鸿蒙操作系统生态应用开发的重要文档。这份白皮书详细介绍了鸿蒙系统的架构、特性,以及如何针对该系统进行应用程序的设计与开发,旨在推动鸿蒙生态的繁荣...

    基于事件机制的IOCP模型

    总的来说,基于事件机制的IOCP模型通过高效利用线程资源和异步I/O,使得Windows应用程序能够处理大量并发的I/O操作。这些源文件的组合揭示了如何构建这样一个模型,包括事件通知、线程同步、I/O处理以及句柄管理等多...

    基于Java语言的安卓手机软件开发.zip

    由于标题与描述一致,我们可以推测这个压缩包内可能包含了一份详细的教程或者项目案例,用于指导读者学习如何使用Java进行Android应用开发。 【标签解析】 "资料"这一标签暗示了压缩包内的内容可能是教学材料、参考...

    Vanilla是一个基于Openresty实现的高性能Web应用开发框架

    **Vanilla:基于Openresty的高性能Web应用开发框架** Vanilla是一个专为Web应用开发者设计的框架,它建立在Openresty的基础上,旨在简化Openresty的使用过程,让开发者能够更便捷地利用Openresty的强大性能。...

    基于HarmonyOS 4开发的一款刷题的鸿蒙APP源代码

    2. **分布式应用开发** HarmonyOS的一大特色就是分布式技术,它允许开发者构建跨设备的应用。在这款刷题APP中,可能会涉及到如何在不同设备间同步用户数据,或者如何实现多设备间的协同操作。这需要深入理解分布式...

Global site tag (gtag.js) - Google Analytics