以不变架构应多变业务_第1页
以不变架构应多变业务_第2页
以不变架构应多变业务_第3页
免费预览已结束,剩余11页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、以不变架构应多变业务该样本程序在充分利用已有开源框架的基础上,开发 了独立的 SinoSoftFrame 架构,基于 J2EE 规范实现,主要分 为三层 : Web 层、业务层、持久层,很好地适应了财产保险 行业的业务特点。财产保险行业业务具有以下特点 :1保险险类、险种、产品众多财产保险公司往往有包括企财险类、家财险类、责任险 类、工程险类、车险类、船舶险类和货运险等几十个险类, 上百个甚至几百个业务险种。这些险类险种既有共性,又有 特性,如何将这些共性和特性有机地组织在一起是我们必须 要有效解决的问题。2全流程业务需要财产保险业务往往包含了投保、承保、批改、理赔、收 付、财务等多个业务处理

2、环节,同时还要通过挂接核保核赔 管理和单证管理功能来降低企业的经营风险。提供多种统计分析与查询接口实现业务数据的统计分析,为企业经营决策 提供及时、有效的支持和帮助。为统一架构与开发规范,降 低保险公司的开发和维护成本,设计的技术架构必须能满足 众多子系统的业务需求与技术要求。3新产品上线要求时间短保险公司为了抢占市场,争夺客户,从研发推出新产品 到产品上线往往只有一周甚至更短的时间,这对我们的系统 架构提出了极高的要求。4行业高速发展,业务多变保险行业是个高速发展的行业,业务多变,这是当前保 险行业的特性决定的,我们只能去适应这些变化。所以,要 求我们的架构必须具备很强的应变能力。5多语言支

3、持随着保险业的逐渐对外放开,越来越多的外资保险公司 成为我们的客户。多语言支持成为这些客户对我们系统的基 本要求之一。当然财产保险行业还有其他一些特点,如全国大集中数 据管理方式、总公司分公司分支机构的管理模式、无纸化 单证管理等等。作为财产保险公司的行业解决方案,系统必 须能够适应以上这些行业特点,满足财产保险公司向用户提 供新业务、新服务,适应市场竞争的需要 ; 满足各地区业务 的变化性,适应地方性险种管理的需要。从保险的定义出发, 保险业务领域可分为投承保、 批改、 理赔等多个业务环节, 针对样本程序, 本文仅介绍承保业务。 承保是保险业务的开始,承保信息关系到保单能否生成、与 投保人能

4、否签订合同、能否出具保单等。本样板程序以保险 领域中“投保处理”环节作为参照实现,所以我们此处仅针 对投保单相关的数据模型进行重点说明。数据模型“投保处理”环节涉及到了用户投保录入时的众多信息 元素,包含了基本信息、标的信息、险种费用信息、条款信 息、共保信息等五大类。投保录入主要涉及到四个主要的实 体对象 : 投保单主表、投保单险种表、标的主表、标的物险 别责任表。除了这四个主要实体对象之间存在着一对多的对 象关系外,每个实体对象还关联着众多的从属对象。投保单主表是整张投保单的概括信息,它的相关从属表有投保兑换率表、投保单条款表、保险关系人表、收费计划 表等 ; 投保单险种相关表描述的投保单

5、项下各险种的相关信 息,当投保单中存在多险种时,险种表描述多条险种信息, 它的相关从属表有投保单保额保费表、险种条款表、险种费 用表等 ; 投保单中的标的信息放在标的相关表中进行分类描 述,以区分不同险种下的不同标的,它的相关从属表根据险 类的不同有财产险标的信息、车险标的信息、动态标的信息 等等 ; 标的险别责任相关表是对投保单中标的最明细的描 述。它的相关从属表有标的物责任条款表、险别责任附加费 表、险别责任免赔额表、险别责任赔偿限额表等。总体架构本着“不重复造车轮但也绝不依赖于任何第三方框架” 的设计思想,我们独立设计开发了自己的基础框架体系 SinoSoftFrame ,在此 Sino

6、SoftFrame 框架体系上,在部分层 面引入一些优秀的开源产品,集成到我们的框架体系 SinoSoftFrame 中。 这样, 当已集成的产品在技术和效率上无 法满足我们的业务需要时或在某个层面有更好、更快、更有 效的新产品时,我们可以很容易地从 SinoSoftFrame 中完成 新产品的升级替换,而对已开发完成的业务实现代码不产生 任何影响或将影响降到最低。 SinoSoftFrame 架构基于 J2EE 规范实现,主要分为三层 : Web 层、业务层、持久层。Web 层采用 MVC 模式,主要任务是接收用户从页面提 交的请求和最终返回处理结果。 对于处理用户请求来讲, Web 层的任

7、务是读取用户提交的表单数据, 把 HttpServletRequest 中的表单数据和请求参数封装到数据传输对象 DTO 中供业 务层处理 ; 对于返回处理结果来讲, Web 层的任务是把业务 层处理完毕后返回的数据传输对象 DTO 返回给 JSP 页面展 现给客户。业务层主要完成业务逻辑的实现。如业务数据校验、业 务逻辑处理、事务管理、记录业务处理日志、抛出业务处理 异常等任务。持久层仅用来完成业务数据持久化和查询读取,这里采 用关系型数据库来完成数据的持久化保存,因此持久层主要 完成数据库的 CRUD (增、删、改、查) ,同时包含对存储 异常的处理等任务。SinoSoftFrame 通过

8、模拟 Spring 的实现机制建立了自己 的容器实现机制,并通过定义接口、扩展基类等方法将对第 三方依赖的内容封装到 SinoSoftFrame 中,从而实现与第三 方框架的解耦。下面重点说明一下在架构设计的三层上具体 采用的实现方式或开源框架。因 Web 层确定采用 MVC 的设计模式, 而软件开发领域 有很多优秀的 MVC 开源框架, 如 Struts、WebWork2 、SpringMVC 等等,但也各有其优缺点。 SinoSoftFrame 的 Web 层实 现选择了 Struts,原因主要是基于它历经6年的不断成熟、它的稳定开发团队、它庞大的社区、用户和程序员基础。页 面展现仍采用了

9、传统的 JSPTaglib 的实现方式。毕竟开发 成本也是架构设计和选型要考虑的重要因素之一。业务层框架的设计要求是增加模块或代码的复用性,降 低业务类之间的耦合,减少程序修改带来的“涟漪”效应。 在SinoSoftFrame的业务层我们选择了 Spring。Spring是一种 无侵入式的轻量级框架,可以用简单的 POJO 去完成接口类 的定义及实现的调用,绝大多数业务对象都不需要依赖于 S p r i n g ;可以很容易对业务层进行单元测试; 它促进程序员养成好的编程习惯(把对接口编程而不是对类编程的代价几乎 减少到零)。当然, Spring 框架带给我们的优势不只以上这些, 它就像系统的

10、粘合剂,对系统各个层面各个环节的功能、实 现框架都提供了无缝的支持。不过,最主要也是最重要的还 是 Spring 的 Ioc 模式实现( Ioc 通俗来说,就是在编制程序 时,只要写被调用者的接口代码,具体子类实例可通过配置 实现)。SinoSoftFrame 选择了 Hibernate 作为持久层实现。 Hibernate 是一种 Java 语言下的对象关系映射解决方案。它为面向对象的领域模型到传统的关系型数据库的映 射,提供了一个使用方便的框架。它的设计目标是将软件开发人员从大量相同的数据持久层相关编程工作中解放出来。Hibernate 不仅负责从 Java 类到数据库表的映射(还包括从

11、Java 数据类型到 SQL 数据类型的映射) ,还提供了面向对象 的数据查询检索机制,从而极大地缩短了手工处理 SQL 和 JDBC 的时间,而且它不会强迫修改对象的行为方式,不需 要实现任何框架要求的接口。惟一需要做的就是创建一份 XML “映射文档” ,告诉框架你希望能够保存在数据库中的 类,以及它们如何关联到该数据库中的表和列,然后就可以 要求它以对象的形式获取数据,或者把对象保存为数据。同 时,它可以支持多达十六种数据库,包含企业级常用的Oracle、DB2、Informix、SQLServer、Sybase等。SinoSoftFrame 系统架构如图 1 所示。同时, 为了提供最佳

12、的用户体验, SinoSoftFrame 框架中 还引入了 Ajax 的 DWR 实现,加上 Ajax 的调用层次后,系 统调用架构如图 2 所示。辅助工具 代码生成工具 JToolPad 设计师设计框架的目的是为了解耦、应变、统一规范、 跨平台、支持多语言,但程序员眼中的好框架更多的则是 : 简单易用、快速开发。而 SinoSoftFrame 框架包含了三层, 进行应用系统开发的程序员要面对众多的接口和实现类以 及多个配置文件,显然并不简单。为此,我们独立开发了辅 助代码生成工具 JToolPad,用以生成 SinoSoftFrame框架中 的部分类和配置文件。为了从程序员的角度查看该架构,

13、我 们将 JToolPad 可以生成的类和配置文件以及框架本身提供 的基类去掉后的系统架构图如图 3 所示。图 3 是程序员开发 应用系统时的框架结构,而针对数据库应用系统中大多数的 单表增、删、改、查操作, JToolPad 还能生成更多的常见类 及代码,如图 3 所示。从图3可以看到,程序员在结合 JToolPad工具使用 SinoSoftFrame 框架时,大多数情况下都只需要完成 Web 层 的页面控制跳转 Action 及业务层的接口和接口实现类即可, 当然还有少不了的JSP页面和Action配置文件。如果程序员 还觉得麻烦, JToolPad 甚至还可以根据实现类直接生成对应 的接

14、口类(当然从设计的角度出发,不建议这么做) 。 自定义标签库为了进一步提高开发速度、统一页面规范, SinoSoftFrame 框架中提供了多种自定义标签,如分页导航 条、通用操作命令按钮、下拉列表、多语言自动支持、代码 选择域、用户自定义风格等。以分页导航条为例,开发人员只需在页面中相应位置嵌 入一段简单的标签库代码即可在页面上显示风格统一并可 自动实现上页、下页、第一页、最后一页、跳转到指定页的 分页导航条。 基类及常用工具类为了易于扩展 SinoSoftFrame 中各层的功能,也为了能 通过 AOP 的方式完成业务的共性操作,如日志、权限检测 等等。 SinoSoftFrame 在各层

15、的基类中都提供了丰富的功能, 如 SQL 权限的自动封装、 功能权限的判断与检测、 险种代码 的自动替换、调试的 Log 自动输出等。同时, SinoSoftFrame 还提供了专门针对新版 SinoSoftFrame 框架开发的工具类, 如页面参数的封装 (单一 对象封装及 List 对象自动封装) 、Hibernate 的增强处理等等。 业务通用组件针对财产保险行业的领域特点及行业通用需求,SinoSoftFrame 中还特意提供了很多业务通过组件, 有用于页 面的通用组件,如 : 嵌套多行输入域、双击代码选择域、多 语言自支持等。也有用于系统后台处理的通用组件,如 : 权 限管理、影像管

16、理、打印管理、代码管理、工作流管理等。 这些组件有的是通过直接调用类的方式实现,有的是通过标 签库实现,大粒度的组件则是按组件的使用规则和使用方法 实现。 引入的其他开源框架针对应用系统开发中的特定问题框架也引入了其他的 优秀开源框架。数据检验采用了 Validtor 校验框架,通过配 置文件就可以对页面的输入域和多行数据域配置校验规则 ; 在使用 Ajax 为用户提供最佳体验方面,采用了 DWR 框架 ; 系统安全认证采用了 Acegi ,Acegi 是在 Spring 的基础上实现 的一套安全认证框架 ; 任务调度采用了 Quartz 调度框架。链接:实现范例我们通过“投保单保存”的一个实

17、际调用过程说明一下 SinoSoftFrame 的具体实现。 Web 层信息录入我们将信息元素按业务分类组织在多个标签页中,如 : 基本信息、标的信息、险种费用信息、条款信息、共保信息 等。每个标签页中包含了该类的主要录入元素。投保相关的 页面通过标签的形式组织在一起,其中标签库包含的内容在 页面中的展现就形成了投保页面上的标签页。其中每个标签 页中的内容又根据页面信息分类的不同包含在不同的JSP页面中,通过标签库有机地组织在一起。针对保险行业系统的国际化要求,JSP页面基本上都是用 STRUTS 标签以及自定义标签来写的。 Struts 配置文件相关定义JSP 页面提交后交由 Struts

18、的 Action 处理,相应的处理 类定义在配置文件 app-prpall-struts.xml 文件中。需要特别注 意的是配置文件中包含的通配符“$”的一行 forward ,内容如下:该通配符是对保险行业产品众多特点的特殊处理,配合 SinoSoftFrame 的目录结构规范,开发人员只需在相应的 Action 中设置需要替换的险种代码即可很轻松、很容易地完成相应保险产品的自动跳转 Web 层 StrutsAction 说明系统应用框架根据 Struts 中的配置文件定义跳转到 GuProposalAction 类,系统应用框架根据 Request 中传入的 actionType 自动跳转

19、到的相应方法中进行处理(处理方法与 actionType 同名)。Web 层处理类 Action 首先将页面参数组织到了投保单复 合对象 GuProposalDto 中。 SinoSoftFrame 是通过 paramUtils 类完成页面变量到 Dto 对象和列表对象自动转换的。 paramUtils 是系统框架中提供的 Request 参数工具类。程序中 简单地通过 paramUtils 的 generateObject 方法和 generateList 方法就可以完成页面参数到 DTO 对象间的自动映射。 业务层实现投保单服务类由接口定义类和实现类组成。接口和实现 的分离从一定程度上消解

20、了依赖关系,具体实现可以在编译 期间发生变化。 GuProposal-Service 及 GuProposalServiceSpringImpl 类图如图 5 所示。在 GuProposalAction 中调用业务层进行投保单保存的代码如下图ServiceManager.getGuProposalService().insert(guProposalDto); 首先通过 ServiceManager 类的 get 方法来获得该服务接 口类,然后通过 insert() 接口方法完成投保单的保存。方法的 具体实现是在服务接口实现类中完成的,系统编码中引用的 是接口类,而接口的实现类是由 SinoSoftFrame 在运行期注 入的。接口和实现类的对应关系通过配置文件 App-prpall-service.xml 定义。 持久层实现持久层主要由两部分构成

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论