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

事件上报的多种设计思路

 
阅读更多
业务很简单:一个事件 上报 然后会发短信通知和邮件通知
变化点分析:事件来源可能来自外系统,也可能增加别的通知方式

1 第一种面向对象设计  ssh结构 
public class Event {
 String event_id;
 String event_name;
}
/**
 * 该接口为创建接口
 * 凡是持久化动作需实现此接口 
 * 
 */
public interface ICreater {
	public void creat(  Event fw);
}
/**
 * 此接口为本系统的动作 
 */
public interface IPuter extends ICreater{
	 
}
/**
 * 此接口为外系统的动作
 */
public interface IGeter extends ICreater{
	 
   void conversion( Event obj);
}
/*
 * 上报者对象
 * 被观察者
 * 信息创建者
 */
public class Upsender extends Observable implements IPuter{

	@Override
	public void creat(Event fw) {
		//调用dao持久化
	}
}
/*
 * 发短信对象
 * 观察者
 */
public class TelSender implements Observer{

	@Override
	public void update(Observable o, Object arg) {
		//发短信
	}
}
/*
 * 发邮件对象
 * 观察者
 */
public class EmailSender implements Observer{

	@Override
	public void update(Observable o, Object arg) {
		//发邮件
	}
 }
public class service {
	/*
	 * service层
	 * 在服务提供中进行逻辑组装
	 */
	public void upsend(){
		
		Upsender upsender = new Upsender();
		EmailSender emailSender = new EmailSender();
		TelSender telSender = new TelSender();
		//加入观察者
		upsender.addObserver(emailSender);
		upsender.addObserver(telSender);
		//上报 事件持久化
		upsender.creat(new Event());
		
		//通知
		upsender.notifyObservers();

		 
	}
}

优点 最熟悉的方式  可根据变化点进行抽象封装以扩展
缺点 对象没有生命 需要把隐含对象找出来  或者就按照3层结构写接口和代码 
2 基于事件通知的领域驱动设计的设计
public class EventProcesser {
	public static void processEvent(DomainEvent de){
		//可以通过传入领域事件对象 直接调用到对应对象的方法 可用开源框架
	}
}
public class Event {
 String event_id;
 String event_name;
 public void handle(UpsendEvent usevent){
	 //进行持久化(省略)
	  
	 //发邮件通知
	 EventProcesser.processEvent(new EmailSendEvent("地址","内容")); 
	 //发短信通知
	 EventProcesser.processEvent(new TelSendEvent("电话","内容")); 
 }
}
/*
 * 发短信对象
 */
public class TelSender {
	 
	private void send(TelSendEvent esevent){
		//此处发短信
	}
}
public class TelSendEvent  extends  DomainEvent{
	String tel_number;
	String tel_conten;
	TelSendEvent(String tel_number,String tel_conten){}
}
/*
 * 发邮件对象
 */
public class EmailSender extends  DomainEvent{
	
	private void send(EmailSendEvent esevent){
		//此处发邮件
	}
 }
public class EmailSendEvent  extends  DomainEvent{
	String email_address;
	String email_conten;
	EmailSendEvent(String email_address,String email_conten){}
}
/*
 * 上报事件
 */
public class UpsendEvent  extends  DomainEvent{
   public String eventid;
   public Date upsenddate;
   public String userid;
}
public class service {
	/*
	 * service层
	 * 在服务提供中进行逻辑组装
	 */
	public void upsend(){
		//UpsendEvent中参数省略
		EventProcesser.processEvent(new UpsendEvent()); 
	}
}

从上面的例子,我们可以清楚的看到领域对象之间没有相互引用,完全通过事件来实现相互协作。比如父对象通知子对象,子对象通知父对象,一个事件通知一个或多个同类型或不同类型的对象,等等。要实现任何一个业务场景,我们需要做的事情一般是:

1)通知中央事件处理器处理某个事件(如果该事件是框架没有提供特定的业务事件,则需要自己定义);

2)领域对象响应该事件,通过定义私有的响应函数来实现响应;

3)在领域模型内部,告诉框架事件及响应者之间的映射关系,并告诉框架有哪个或哪些对象会去响应,它们的唯一标识是如何从事件中获取的;



通过这三个步骤,我们就可以轻松简单的实现各种领域对象之间的协作了。而且需要强调的是,通过这样的方式,可以充分体现出领域对象是“活”的这个概念。因为所有的领域对象的事件响应函数都是私有的,也就是领域对象自己的行为别的领域对象无法去调用,而都是由一个“中央事件处理器”去统一调用。这样的效果就是,任何一个领域对象都会“主动”去响应某个事件,这样就从分体现出了“活”对象的概念了。在我看来,这才是真正的面向对象编程,因为所有的对象都是主动参与到某个业务场景中去的。

优点:高度可扩展性,因为是基于事件消息机制的,把领域对象之间的耦合度降到了最低
缺点:可维护性方面可能有问题,会出现超大类 还有习惯问题
0
1
分享到:
评论
1 楼 fywxin 2011-08-04  
第二种方式不明白~

相关推荐

    心跳检查和思路代码

    题目中提到了一种基于Java的心跳检测实现方案,下面将详细介绍这一方案的设计思路和核心代码。 ##### 1. 设计思路 心跳机制的核心思想是让客户端定时向服务器发送状态信息,服务器接收到这些信息后更新客户端的状态...

    s3c2410-kbd.rar_S3C2410 键盘驱动 程序_linux 驱动_s3c2410_嵌入式linux_嵌入式lin

    本文将围绕"S3C2410键盘驱动程序"这一主题,详细阐述其工作原理、设计思路以及在嵌入式Linux环境中的应用。 S3C2410是一款由Samsung公司生产的基于ARM920T内核的微处理器,广泛应用于嵌入式系统中。该处理器支持...

    JAVA海康威视isup方式demo包,与人脸考勤机打通。适用于人脸考勤机没有固定IP情况.zip

    海康威视作为行业内的知名品牌,其人脸考勤机广泛应用于企业、学校、医院等多种场景。在没有固定IP地址的环境下,人脸考勤机的IP地址可能会频繁变化,给常规的TCP/IP通讯带来挑战。而ISUP协议作为一个成熟的电话网络...

    基于ARM和多通信模式的装备远程监控系统设计.pdf

    这种设计思路对于提高军事通信系统的可靠性具有重要意义,特别是在现代战争中,快速、准确的信息传递和设备管理是决定胜负的关键因素之一。 综上所述,基于ARM处理器和多通信模式的远程监控系统设计为远程通信装备...

    基于西门子PLC多路开关控制的设计.pdf

    在设计思路及系统组成方面,本文提出了一种基于西门子PLC的极化控制器设计方案,采用了CPU226型PLC作为核心控制器。CPU226型PLC是CPU22X系列中功能最强大的单元,足以满足中小型复杂控制系统的需求,具备了多种功能...

    基于车联网的车辆远程控制系统设计.pdf

    远程控制系统设计中,移植了Linux系统来设计车载终端软件结构,并且重点介绍了应用层多线程设计思路、线程间通信与同步的方法。这些设计确保了系统能够稳定可靠地运行,并实现对车辆的远程控制与信息交互。 实验...

    可视监听对讲系统集成技术方案.docx

    ##### 总体设计思路 根据国家有关部委发布的安防信息化建设指导方针和技术要求,本方案旨在构建一个高度集成化的综合安防系统,其核心目标是为监所安全提供全面的技术支持,包括事前的预防、事中的处理以及事后的...

    弱电系统方案1-视频监控系统.docx

    设计思路注重信息共享和子系统间的联动,确保系统独立运作的同时也能整体集成。通过一步到位的设计,保证系统的扩展性和兼容性。子系统既可独立工作,也可通过综合安防管理平台实现联动,形成安全防范体系。此外,...

    --智慧校园安全预警联动监管平台建设方案.doc

    - **总体设计思路**:整合现有资源,建立统一的数据中心,实现数据共享;构建多级预警机制,提高预警准确率;建立联动机制,提升应急响应速度。 - **总体技术路线**:基于云计算、大数据、物联网等技术,构建平台...

    新思路打造移动端个案综合日志分析系统.pdf

    在美团点评的实际应用中,Logan已接入49个App,支持iOS、Android和Web小程序等多个平台,处理了26种日志类型,涵盖了网络日志、行为日志、崩溃日志等多种场景。通过真实案例,展示了Logan如何帮助定位和解决网络故障...

    基于微区域大数据的传染病防控系统设计与实现.pdf

    微区域出入管理系统的设计思路是让用户主动通过二维码签到上报个人位置信息,从而让系统能够汇总并分析大区域内的用户信息,以此进行综合风险评估。这与传统应用中依靠移动应用程序自动记录位置信息有所不同,用户...

    平安城市-监控指挥中心设计方案.docx

    - **系统架构设计**:采用模块化设计思路,将视频监控系统、报警系统、指挥调度系统等关键组件有机整合,形成高效协同的工作流程。 - **综合控制系统**:集成视频切换、音频控制、灯光调节等多种功能于一体,便于...

    基于Web的疾病报告管理系统设计与实现.pdf

    文章从系统设计的角度出发,详细阐述了系统的设计思路和具体实现。系统采用B/S架构,这使得系统的部署和维护变得简单,用户也能通过网页轻松访问。系统的前台主要面向医生和医院工作人员,提供简洁直观的操作界面;...

    智慧应急解决方案.pptx

    指挥调度在智慧应急中至关重要,包括突发事件上报、救援现场情况的指挥调度,以及与公安、气象、交通等部门的协同工作。通过融合通信技术,如语音调度、视频调度、会议会商、APP调度和GIS调度,实现了一键应急会商、...

    智慧政务综合治税系统详细设计(完整版).docx

    综上所述,这份“智慧政务综合治税系统详细设计(完整版)”文档不仅提供了系统的整体框架和设计思路,还详细阐述了系统的各项功能需求、技术实现方案、数据库设计等多个方面的内容,为项目的顺利实施提供了坚实的...

    综合报警系统集成方案.docx

    **1.1 总体设计思路** - **政策背景与目标:** - 遵循国家相关部委的指导方针和技术要求,旨在构建一个高效、智能的安防集成系统。 - 目标在于实现事前防范、事中处理、事后分析的有效技术支持,建立一套全面的...

    智能数据收集.docx

    3. 设计思路与实施: - **工作流表单设计**:利用类似Word的操作方式设计调查表,预先规划表格布局,添加各种控件,并配置权限。 - **流程配置**:在工作流设置中设计流程,控制每个步骤的可写字段、附件权限和...

    基于Zigbee技术的智能家居平台应用设计方案.pdf

    基于Zigbee技术的智能家居平台应用设计方案,是智能家居领域中的一种创新设计思路。Zigbee技术是一种短距离、低功耗的无线通信技术,它支持点对点通信、星形网络以及网状网络等多种拓扑结构。在智能家居领域,Zigbee...

    ios-一个类似Tumblr的广告展示方式.zip

    在iOS开发中,为了在...通过对这个项目的学习,开发者可以借鉴其设计思路,结合自己的需求,构建出更适合自己应用的广告展示系统。同时,也可以深入了解如何在UITableView中高效地管理和展示复杂内容,提升开发技能。

Global site tag (gtag.js) - Google Analytics