`

[已更新Demo附件]生命周期组件框架——关系型状态机服务

阅读更多
 

让写业务代码变得再简单一些!

 

关系型状态机服务的生命周期(Lifecycle)组件框架开启一个新的维度,与各种框架提供的通用非功能服务(比如事务服务,安全性服务)等略有区别,它更贴近于业务建模本身,而又能通过代码以元数据的形式描述一组业务对象的生命周期。元数据的表达使得对状态机的实现更像是文档而非指令式的源代码。如果要更改业务对象的生命周期,只需要更改这份元数据描述,增加或修改相应的业务方法,而不包括对生命周期状态的检查和赋值,这将减少很多代码修改量,并且更安全可靠。该框架的代码量很小,但可以在另一个基础层面提供强大的服务。

 

生命周期组件框架,透明的帮助业务逻辑进行业务对象本身的生命周期状态检测以及关系生命周期的检测。后者尤为重要,往往是一个系统开发了5~6年大量的推广普及以后,最终发现面临很多新的功能或者增强的功能时,开发者都是那么的无力回天,多次研讨会议最终也是说如果当初那样设计就不会造成现在的局面;产品经理们最后面对这头大象也只能装作没有看见。而生命周期组件框架在运行时,作为一个高“情商”的顾问,会在“不适合发生”方法调用时阻止方法调用,保护应用程序的正确状态。

 

此外,生命周期组件框架还提供丰富的事件和回调机制。对于业务对象本身,生命周期组件框架提供状态转换的回调方法,可以极大的利用业务对象本身的上下文来极为方便的表达和完成更多的任务和工作。而对于其他业务模块对三大事件源之一的状态变化事件的需求,生命周期组件框架同样提供松耦合的事件传播。

 

对于一个长时间运行的进程或者过程,往往它的完整性约束和一致性约束不能由系统的事务服务来满足。尤其是宕机出现时,这些进程或者过程大多都表现为不准确的状态。解决这些问题,这更是生命周期组件框架大显身手的战场,在与系统的生命周期事件结合之后,生命周期组件框架可以帮助那些“在飞行的”进程或者过程完美的恢复,而程序员只需要提供很简单的元数据描述以及相应的纯粹的业务方法,甚至是现有的可重用的方法。

生命周期组件框架可以集成不同环境下的锁机制,比如JavaSE环境下的简单的可重入锁,比如JavaEE环境下的JPA的锁,尤其是乐观读写锁,它在验证庞大的关系层级生命周期时,尤为重要。当你深入的了解到生命周期组件框架在关系生命周期的验证方面所做的工作之后,相信你一定更加清楚的认识到过去所写的业务代码的正确性是多麽的有限。如果这一切都不能满足,还可以自定义锁机制,毕竟并发的情况可以非常的复杂,生命周期组件框架只做它应该做的一部分,不需要的情况下它不会多管闲事。

 

生命周期组件框架并不需要业务对象POJO实现任何多余的接口只需要对现有的POJO进行标注即可。就像很多流行的组件框架一样,它在运行时在字节码层面拦截方法执行。除了添加生命周期描述以外,就只有减少代码量。

 

最重要的是生命周期组件框架是开源的,免费的,任意修改发行的。开源地址如下:

https://github.com/zhongdj/Swordfish/tree/master/Platform/Lifecycle 


此刻Lifecycle Framework核心功能第一个版本现在可以尝试了。虽然它的测试覆盖率还没有超过90%,或许性能也还有很大提升的空间,与其他流行组件框架的兼容性还需要进一步测试。但这都只是时间的问题。与其所提供的概念和服务相比,那都是微不足道的。生命周期组件框架可以像其他组件框架一样,提供一种基础层面的服务,这种基础的服务,不仅仅可以减少编码量,还可以产生新的编程实践,使得架构更简洁,促使应用程序设计变得更健壮。希望生命周期状态机服务可以成为JCP的一个规范,使得更多的开发者从中受益。

 

注:如需要尝试需要注意两方面: 

  1. 正确打包和配置manifest文件。目前如果checkout整个工程,那么该部分工作pom文件已经帮您做了。
  2. 运行时需要正确的依赖jar包类路径的正确设置,应该跟manifest文件保持一致。目前如果checkout整个工程,那么该部分工作pom文件已经帮您做了。

详情请参看pom文件。

 

目前添加了部分代码示例到附件中,可以使用JDK7 + Eclipse打开

分享到:
评论
4 楼 barryzhong 2013-11-24  
superdingdang 写道
引用
“在飞行的”进程或者过程
指的是?


有一些应用场景涉及到长时间在内存中运行的任务,即使是在业务(事务)系统中。往往对于这样长时间运行的任务而言,它的生命周期会包含类似于“运行中”的状态(就是在飞行的状态)。这种任务都有两个共性:第一不能使用“事务模型”来简单处理,做了两个小时,任务完成了89%,不可能因为接下来的故障而回滚前2个小时的工作(对于整个任务不能Rollback)。第二既然是长时间运行,又不能采用事务服务来保证一致性,持久性和完整性,那么就需要自身来维护自己的生命周期。假使在运行中出现断电,重启等状况,这些长时间处于运行态的任务应该能够恢复自身的运行状态。简单地说就像是下载程序一样,在支持断点续传的前提下,每一个下载任务都能够记录当前下载的区块的偏移量,一旦故障重启,程序仍然可以根据之前记录的偏移量继续从支持断点续传的下载服务继续执行任务。虽然,之前下载任务未记录偏移量的缓存部分会丢掉,但是这本身最小化了故障恢复的成本。而另外一种,对于不支持断点续传的下载服务,应用程序就没有办法恢复(Resume)之前的下载状态,要想恢复之前的任务,只能重新下载(Redo)。

生命周期框架的Recover机制,在集成服务器生命周期扩展或者独立应用程序的生命周期扩展之后,就可以在合适的时机,自动的修复(Recover):包扩基本的Resume和Redo
3 楼 barryzhong 2013-11-24  
superdingdang 写道
引用
生命周期组件框架,透明的帮助业务逻辑进行业务对象本身的生命周期状态检测以及关系生命周期的检测。
中的关系生命周期指的是什么?


关系指的就是面向对象设计建模中的对象与对象之间的“关系”:包括依赖,关联,聚合以及组合。而关系的确立也由对象与对象的交互过程决定的。交互所涉及到双方生命周期的交集与交互双方本身的生命周期共同决定了关系的类型。

比如打印机与纸,他们各自有自己独立的生命周期,仅仅是在打印过程中才发生交互。纸的存在不依赖于打印机的存在;打印机的存在也不依赖于纸的存在。但是它们的生命周期可以有交集,就是在打印的过程中,两者发生交互。而交互所覆盖的生命周期仅仅是打印机和纸生命周期中的一小部分。这种就是除了没有关系以外最弱的关系——依赖。

当然这也可以被设计成关联,比如,打印的人并不是每次使用打印机时才放进去一张纸(笔者在很多农村的打印社看到的就是这样的使用方式),而是把一打纸放在打印机的纸盒里,当有打印要求发生的时候,打印者通常不会自己拿一张白纸放到打印机里,而是直接要打印机打印。那么实际上打印机就负责了纸张的一部分管理任务。此时纸张与打印机的生命周期覆盖显然要比第一种情况的生命周期交集要大一些,但是两者的生命周期的开始,即打印机的诞生和纸张的诞生还是没有关系,打印机的销毁和纸张的销毁还是没有关系。但是在打印服务运行过程中,打印机又多出一部分关于纸盒的管理,在向外提供打印服务时,纸并不是一个输入状态,而是打印机自身维护的一个状态,这就构成了一个比较弱的has a 的语义——关联关系。

众所周知,随着生命周期覆盖的增加,关系也就渐强。从无缘对面不相逢(没有关系),到萍水相逢路见不平拔刀相助(依赖),到同舟共济(关联),到一个家庭(聚合),再到同生共死(组合)。(比喻未必恰当)

而生命周期组件框架扩展了传统UML状态机,增加了对关系约束的检查。保证一个对象的行为发生时,这个行为依赖到的关系必须处在恰当的生命周期状态。比如打印服务在打印之前,纸张必须是有单面空白的,才能打印。或者在一个人求另一个人办事之前,需要确认另一个人的心情很好时才去找此人谈这件事等等。
2 楼 superdingdang 2013-11-24  
引用
“在飞行的”进程或者过程
指的是?
1 楼 superdingdang 2013-11-24  
引用
生命周期组件框架,透明的帮助业务逻辑进行业务对象本身的生命周期状态检测以及关系生命周期的检测。
中的关系生命周期指的是什么?

相关推荐

    自己动手做框架——ORM,MVC,IOC框架

    3. 构建IOC容器:设计一个容器来管理对象的生命周期和依赖关系。实现依赖注入,可以通过构造函数注入、setter注入或接口注入等方式。 4. 整合上述组件:将ORM集成到MVC框架中,使模型能够通过ORM与数据库交互;同时...

    Android生命周期Demo

    首先,Android生命周期是指一个Android组件(如Activity、Service等)在其存在期间经历的一系列状态变化。对于Activity,这些状态包括创建(Created)、启动(Started)、运行(Resumed)、暂停(Paused)、停止...

    一个完整的SSH框架demo

    **Spring框架**:Spring是一个全方位的轻量级应用框架,它提供了IOC(Inversion of Control)容器,用于管理对象的生命周期和依赖关系。此外,Spring还提供了AOP(Aspect-Oriented Programming)功能,实现切面编程...

    安卓开发框架源码demo

    4. **Dagger 2**:依赖注入框架,帮助管理对象的生命周期和依赖关系,使代码更清晰、更易于测试。 5. **RxJava**:响应式编程库,允许以声明式方式处理异步数据流,常与Retrofit结合使用进行网络请求。 四、源码...

    UML层次状态机详解

    本文旨在详细介绍层次状态机的基本概念及其在嵌入式软件开发中的应用,并探讨如何设计和实现一个可复用的应用框架——`StateMachineWizard`。 #### 二、层次状态机概述 ##### 2.1 层次状态机定义 层次状态机是一...

    Cyclus一个用于管理具有运行时状态的软件组件的生命周期和依赖关系的小型库

    Cyclus库是一个专门为管理具有运行时状态的软件组件设计的小型库,尤其关注组件的生命周期管理和依赖关系的处理。在JavaScript开发领域,它提供了一种高效的方式来组织和协调复杂的软件系统,使得开发者能够更有序地...

    1003————自动搭建SSH框架 1004————SSH框架手动搭建

    SSH是Spring、Struts和Hibernate三个开源框架的首字母缩写,它们分别负责应用的依赖注入、MVC模式实现以及对象关系映射。这里我们将深入探讨SSH框架的自动搭建与手动搭建。 首先,让我们了解SSH框架的核心组件: 1...

    SSM框架——详细整合教程(Spring+SpringMVC+MyBatis)

    首先,Spring框架是核心,它提供了一个全面的编程和配置模型,用于管理应用对象的生命周期和依赖关系。Spring通过IOC(控制反转)和AOP(面向切面编程)两大特性,降低了组件间的耦合度,使代码更易于测试和维护。在...

    ssm+mysql框架Demo

    **SSM+MySQL框架Demo详解** SSM框架是Java Web开发中常见的组合,由Spring、Spring MVC和MyBatis三个组件构成,常用于构建高效、灵活的企业级应用。本Demo旨在为初学者提供一个基础的SSM框架集成及MySQL数据库应用...

    spring-mybatis-struts2-master ——demo

    《SSM框架整合详解——基于spring-mybatis-struts2-master的实战分析》 在Java Web开发领域,SSM(Spring、Struts2、MyBatis)框架的组合被广泛使用,因其灵活性和强大的功能而备受青睐。本篇文章将深入探讨这个...

    springdemo:spring框架演示——学习

    Spring 提供了一个轻量级的容器,用于管理对象的生命周期和依赖关系,同时也支持面向切面编程(AOP)和模块化的Web应用程序开发。在"springdemo:spring框架演示——学习"项目中,我们可以深入理解并实践Spring框架的...

    企业不同生命周期现金流量研究——基于2012年浙江创业板上市公司的调查4218]-论文.zip

    这篇论文标题为“企业不同生命周期现金流量研究——基于2012年浙江创业板上市公司的调查”,这是一项针对浙江创业板上市公司在2012年的现金流量分析。现金流量是企业财务健康状况的重要指标,反映了企业在一定期间内...

    Java EE 框架整合开发⼊⻔到实战——Spring+Spring MVC+MyBatis(微课版)课后习题答案.pdf

    在Spring框架中,IoC容器管理Java对象的生命周期和对象之间的依赖关系。通过IoC,对象被动地接收依赖关系,而不是主动创建或者查找依赖关系,这种模式也被称为依赖注入。Spring通过BeanFactory接口和...

    完整的基于泛形、SOA设计思想的.net 框架 Demo 代码

    在本Demo中,泛形可能被用于ORM(对象关系映射)层,实现通用的数据访问接口,或者在BO(Business Object)层,创建泛型的服务代理,以提供更加灵活的数据操作方式。 其次,我们关注的是“SOA设计思想”。SOA是一种...

    COM技术内幕——微软组件对象模型

    2. **对象创建与生命周期**:COM组件的创建过程涉及到CoCreateInstance函数,而对象的生命周期管理则涉及引用计数和自动垃圾回收。理解何时创建和释放对象对于避免内存泄漏至关重要。 3. **接口设计**:接口是COM...

    SSM框架整合demo

    它简化了JavaBean的管理,通过配置文件或注解来管理对象的生命周期和相互依赖关系。在SSM整合中,Spring作为整体架构的基石,负责管理和协调其他组件。 2. **Spring MVC**:Spring MVC是Spring框架的一个模块,专门...

    计算机职称考试题_基础知识——紧凑型.zip

    6. 信息系统与项目管理:IT项目的生命周期管理,包括项目规划、执行、监控和收尾,以及ISO/IEC 20000和ITIL等服务管理框架。 7. 法规与伦理:与信息技术相关的法律法规,如数据保护法、版权法,以及IT职业道德规范...

Global site tag (gtag.js) - Google Analytics