一种基于实体的软件框架系统及运行方法

文档序号:6557334阅读:110来源:国知局

专利名称::一种基于实体的软件框架系统及运行方法
技术领域
:本发明涉及软件
技术领域
,尤其涉及基于实体的软件框架系统及运行方法。
背景技术
:随着J2EE技术的发展,对各种基于Java技术的软件框架的研究和应用也上了一个新的台阶,许多优秀的软件框架,如struts、hibernate等正广泛应用于不同行业、不同规模的软件开发中。目前比较流行的几种软件框架都是面向开发者提出的,即仍需要软件框架的使用者具备一定的软件开发能力,同时对J2EE各种技术也要有一定的了解,从而限制了框架的应用层面,也不利于进一步提高开发效率、降低成本。目前应用最广的软件框架是APACHE软件基金会的开源项目struts(http//struts.apache.org/)。该框架基于MVC(Model,View,Controller,模型、视图、控制器)模式,采用前端控制器处理客户端交互、业务逻辑模块执行,并提供了一系列JSP(JavaServerPages,Java服务器页面)标签以简化开发人员的工作。struts的系统架构如图1如示,前端控制器是struts的核心模块,它主要负责下列工作1.在启动时加载配置文件、资源文件,2.截获JSP页面的请求,根据配置文件的定义,将请求转发给指定的业务逻辑执行模块进行处理,3.业务逻辑处理完毕后,根据配置文件的定义,定向到指定的视图(JSP页面)。图中以虚线框包含的部分—业务逻辑执行模块、JSP页面是开发者需要自行开发的。为了简化用户的开发,Struts提供了一系列机制,包括提供页面标签,封装常用的功能以满足用户的页面校验、国际化等需求。图2为一个简单的struts调用过程,对其中各对象的说明如下JSP指jsp页面,起用户视图的作用;ActionForm相当于一个封装业务数据的容器,使数据能在JSP和业务逻辑执行模块中传递,并提供一些基于ActionForm的校验机制。每个ActionForm包括若干域,每一个域就是一项业务数据。ActionForm可以由开发者定制,在代码中指定各个域;也可以用struts提供的通用模板,在配置文件中描述其中的域;控制器负责控制功能的一组组件,负责系统初始化时配置文件的读取、系统运行时转发请求给业务逻辑执行模块、选择合适的用户视图等;Action业务逻辑执行模块,每个Action负责处理一个特定的业务逻辑。整个流程的说明如下1.JSP页面对ActionForm的数据进行处理,其中包括a)数据读取,即获取从前面JSP或者Action中处理过的ActionForm中处理过的数据并显示出来,b)数据赋值,即通过用户输入,将ActionForm中的域赋值;2.JSP提交请求给控制器;3.控制器根据配置文件的定义,将请求转发到指定的Action进行处理;4.Action接收到请求,从ActionForm中读取所需要的业务数据;5.Action执行业务逻辑,包括查询、修改数据库或者进行运算等(Action执行完业务逻辑后,也可以向ActionForm中赋值);6.Action将处理权还给控制器模块;7.控制器根据配置文件的定义,选择相应的JSP展现用户视图。Struts作为目前应用面最广、最为成熟的web框架,具有许多优点,但是如上所述,由于它是面向J2EE开发者提出的,其中的JSP、Action部分,有些时候包括ActionForm部分都需要开发者编写程序实现,因此需要框架使用者熟悉J2EE技术。即对于熟练的java开发者来说,使用struts来构建自己的系统能带来很大的方便,而对于那些不熟悉java的开发者来说则显得相当困难。从系统功能的方面来看,struts虽然是一个功能强大的框架,但是也有相当大的部分没有涉及,最主要的是不能自动生成用户视图和完成数据持久化。而J2EE开发中,这两部分是相当繁琐的,即使使用者已经掌握J2EE技术,仍然需要花费大量的时间进行编码和调试。这使得项目的开发成本不能进一步降低。
发明内容本发明提供一种基于实体的软件框架系统及运行方法,使系统管理人员能迅速搭建起一个大型应用系统。本发明一实施例提供一种基于实体的软件框架系统运行方法,包括步骤系统启动后,控制器调用配置文件加载实体信息;用户通过通用视图模块发出请求,所述控制器将所述请求转发给通用业务逻辑执行模块,所述通用业务逻辑执行模块根据实体信息和用户请求中信息执行业务逻辑,向所述控制器返回执行结果;所述通用视图模块显示所述执行结果。可选地,用户通过通用视图模块发出请求进一步包括步骤用户进入通用页面上发出请求,通用视图模块向控制器发送请求,所述控制器查询实体信息后,通用视图模块根据查询到的所述实体信息,生成视图界面,所述用户通过所述视图界面发送进一步的请求,所述请求包括数据信息。可选地,所述通用业务逻辑执行模块根据实体信息和用户请求中信息执行业务逻辑进一步包括步骤所述通用业务逻辑执行模块向所述控制器请求实体信息,控制器读取实体信息并返回给通用业务逻辑执行模块,通用业务逻辑执行模块根据实体信息和请求中信息执行业务逻辑。可选地,需增加新的视图或业务逻辑时,在所述配置文件中注册新增包含视图的实体信息或定制业务逻辑执行模块,重新加载所述配置文件。本发明一实施例提供一种基于实体的软件框架系统,包括通用视图模块,用于接收用户请求,并根据实体信息生成用户视图界面;通用业务逻辑执行模块,用于接收控制器转发来的请求,根据实体信息执行业务逻辑,并返回控制器执行结果;控制器,用于转发请求给通用业务逻辑执行模块,接收来自通用视图模块的请求,并向通用视图模块发送实体信息、视图信息或执行结果。优选地,所述控制器还包含配置文件读取模块,用于被控制器调用,以加载配置文件中的实体信息。优选地,所述系统还包括定制逻辑执行模块,所述定制逻辑执行模块在配置文件中注册,被控制器调用。本发明方案的有益效果如下本发明提出的软件框架基于实体实现,无需二次开发者编码、修改通用视图模块,控制器和通用业务逻辑执行模块,利用配置的方式即可生成用户视图,完成数据持久化,是完全面向系统管理人员提出的。开发人员、DBA、系统维护员、配置管理员、甚至是从未写过一行程序的人都能使用此框架迅速建立起自己的应用系统。且此框架能与企业已有应用系统整合,能溶入整个EIS中。1.能在短时间内迅速搭建大型应用,大幅降低了软件项目的开发成本根据在实际项目中的实践对比,运用本系统搭建J2EE应用,将使开发成本降到原来的1/20到1/30。以我司S项目为例,对比2个规模相似的子系统的J2EE部分,其中一个是按照传统方式,以Struts为架构进行开发,6名开发人员共花费15个人月完成,而另一子系统采用本系统架构,仅分配一人对配置文件进行修改,在2周内完成。2.提高软件质量,增加客户满意度由于应用本架构可做到不编写代码或者只编写极少量代码,因此减少了开发过程中编码产生的错误,提高了软件质量。图1为现有技术struts的系统结构框图;图2为现有技术struts的调用流程图;图3为本发明一实施例的系统结构框图;图4为本发明一实施例的系统运行流程图;图5为本发明另一实施例的查询执行流程图;图6为图5所示流程查询结果示意图。具体实施例方式以下将结合附图对本发明实施例进行说明。本发明一个实施例的系统结构框图如图3所示,其中实线部分为系统的通用部分,虚线部分为系统拓展功能,图中各模块功能描述如下通用视图模块包括JSP页面、封装视图功能的javabean和一些页面标签。通用视图无须二次开发者编写程序实现,通过实体信息描述就能自动生成,二次开发者可以通过配置指定展现方式,如列表方式、树状图方式等。二次开发者的定义是将本系统作为一个平台架构,在其上通过配置或者编码实现自己的特定需求的程序员。控制器分为几个部分,如配置文件读取模块、实体信息管理模块、请求交互模块、EJB(EnterpriseJavaBeans)调用模块等。控制器在二次开发时,无需二次开发者修改。配置文件读取模块被控制器调用,专门对配置文件、资源文件进行读取、解析的模块。通用业务逻辑执行模块具有自动数据持久化能力的业务执行模块,能根据实体信息自动执行运算和数据库操作。控制器负责接受用户的请求,然后转发到通用业务逻辑执行模块,通用业务逻辑执行模块负责执行这些转发来的请求。本系统的持久化是通过将数据保存到数据库实现的。定制逻辑执行模块和定制页面是二次开发者后期根据需要自行开发的执行模块和视图,在配置文件中注册后,被控制器调用。本系统是基于实体实现的,实体信息是使用者在配置文件中指定的,包括实体基本信息和实体关系两方面实体基本信息包括实体对应的数据库中的表(可以是多张表),实体包含的字段及实体的读取,存储属性相关信息。实体关系指实体之间相互关联的关系,包括一对一,一对多及多对多等关系,同时需要指定实体之间关联的列。本系统的功能主要包括1.用户视图自动生成;2.用户请求自动处理;3.数据自动持久化保存。实施例一结合图4,以系统初始化和一个简单的调用为例来说明本系统的运行。1.系统启动时,控制器调用配置文件读取模块加载已定义好的实体信息。配置文件是以.xml文件形式保存在硬盘上的。加载实体信息时,将依次加载实体基本信息和实体关系信息;需增加新的视图或业务逻辑时,在所述配置文件中注册新增实体信息或业务执行逻辑,重新加载所述配置文件。在系统运行时,如果配置文件被维护人员修改过,可以通过界面手动触发重新加载;控制器还可以解析、读取EJB,数据库连接等配置信息,一般在系统初始化时读取配置文件,然后提供接口给其他模块,其他模块调用这些接口就可以获得配置文件中的信息。控制器可能需要加载资源文件。视图界面上的文本都是在资源文件中定义的,通过资源文件,能方便、迅速地支持国际化的需求。2.当用户点击某一个链接进入通用页面时,通用视图模块向控制器发送请求,查询该链接对应的实体,通用页面为通用视图模块的一个缺省选择页面;3.控制器在配置文件中查询实体信息,并将查询到的实体信息返回给通用视图模块;4.通用视图模块根据实体信息生成视图界面,系统通过解析实体对应的表,表结构,字段类型等属性,决定实体的展现方式,然后来生成对应的视图的。如果有些界面不需要视图,可以略过该步骤,直接进入处理步骤6;5.用户在视图界面进行操作,可进一步提交包含业务数据信息的请求,通用视图模块提交请求给控制器;6、控制器解析请求,判断用户的操作类型,将请求转发给通用业务逻辑执行模块;7、通用业务逻辑执行模块向控制器请求实体信息;8、控制器读取实体信息,并把实体信息返回给通用业务逻辑执行模块;9、通用业务逻辑执行模块根据返回的实体信息和请求中的数据信息,进行操作,包括运算及数据库操作;10、操作执行完成后,通用业务执行模块将执行结果和处理控制权交给控制器;11、控制器根据实体信息选择合适的视图,并将执行结果数据传递给通用视图模块;通用视图模块按照默认方式显示,或查询实体信息中显示信息,根据所述显示信息显示。实施例二下面以电信计费系统中资费配置为例,对本系统的配置和运行进行详细说明。假设在计费系统中,有套餐-资费-费率3种实体。其中,费率是最底层的实体,用来表示使用价格,如0.6元/分钟,1元/K等。资费将费率进行封装,然后指定通话场景,如晚上10点到早上6点时段,使用0.3元/分钟的费率等。套餐是由一系列资费组成的,直接提供给用户订购,以方便运营商推销或捆绑销售,如GPRS数据业务套餐包括若干数据业务的资费,资费1,资费2,...,资费n,每一资费又分为不同费率。基于这种实体结构,可以进行如下设置1.配置实体基本信息实体基本信息包括实体对应的表,实体的列以及一系列相关属性如,套餐表对应的表名为t_tariff_plan,其中有3个列,分别是tariff_plan_id(套餐ID)tariff_plan_name(套餐名称)status(套餐状态,0代表未生效,1代表已生效)。则可在实体配置文件中做如下定义<entityid=″tariff_plan″text=″entity.tariff_plan″><tablesetid=″t_tariff_plan″table=″t_tariff_plan″><meta-dataid=″tariffPlanID″isdisplay=″false″type=″int″column=″tariff_plan_id″text=″tariff_plan.id″pk=″true″query=″true″notNull=″ture″autoIncrement=″true″length=″8″/><meta-dataid=″tariffPlanName″type=″string″column=″tariff_plan_name″text=″tariff_plan.name″query=″true″notNull=″true″length=″30″/><meta-dataid=″status″type=″string″default=″0″column=″status″text=″tariff_plan.status″query=″true″isBasic=″false″length=″1″><referencetype=″enum″><valuedata=″0″disp=″tariff_plan.status.n″/><valuedata=″1″disp=″tariff_plan.status.y″/></reference></meta-data></tableset></entity>下面对该段配置文件进行说明<entityid=″tariff_plan″text=″entity.tariff_plan″>是对实体的说明,其中的id是唯一索引,在同一份实体配置文件中(本系统可以支持安装模块划分成多个实体配置文件)不能重复。Text属性为实体的显示值,这是借鉴struts的国际化机制实现的。当配置了text=″entity.tariff_plan″属性后,系统能够读取资源文件中的entity.tariff_plan对应的值(如套餐),并且做为实体的标题显示在界面上。<tablesetid=″t_tariff_plan″table=″t_tariff_plan″>表示实体对应的表。其中,id表示表的唯一索引,在同一实体中(本系统可支持一个实体对应多个表)不能重复。Table表示数据库中的表名称。<meta-data>用于描述实体的字段,其中<meta-dataid=″tariffPlanID″isdisplay=″false″type=″int″column=″tariff_plan_id″text=″tariff_plan.id″pk=″true″query=″true″notNull=″ture″autoIncrement=″true″length=″8″/>用于描述字段tariff_plan_id(套餐ID)。i.id表示字段的唯一索引,id在同一个表中不能重复ii.isDisplay表示是否显示在查询结果里,isDisplay为false的时候,该字段将隐藏(该功能主要用于一些不希望用户看到或不希望用户编辑的字段)iii.type表示字段的数据类型,这里为整数。在新增和编辑的界面上将自动根据字段数据类型进行校验。iv.column表示字段对应的数据库表中的列名v.pk表示字段是否是主键vi.query表示字段是否需要作为查询条件,当query为true的时候,在通用查询界面中将把该字段作为查询条件显示在界面上。vii.notNull表示字段是否可为空,当notNull不为空的时候,在新增和编辑的界面上将进行空值校验。viii.autoIncrement表示字段是否自增长,如果autoIncrement=″true″则系统会自动为该字段赋自增长值ix.length表示字段长度<reference>用于引用字段,在新增或编辑界面上用下拉框表示其枚举值。同样的,还可以配置出资费(tariff)、费率实体(rate)的实体信息。2.配置实体关系信息实体关系属性主要描述实体之间的关联规则,如套餐实体和资费实体是一对多的关系,通过资费实体的外键tariff_plan_id进行关联,则可以在实体配置文件中指定关系如下<relid=″tariff-tariff_plan″entity=″tariff″parent=″tariff_plan″><conditioncondi=″tariffPlanID=?″><parameters><parameteruseColumn=″tariffPlanID″/></parameters></condition></rel>下面对该段配置文件进行详细描述<relid=″tariff-tariff_plan″entity=″tariff″parent=″tariff_plan″>是对实体关系的说明,其中id是关系的索引,在同一份实体配置文件中不能重复,entity是实体id,parent是父实体id,entity=″tariff″parent=″tariff_plan″合起来表示这是描述资费(tariff)和套餐(tariff_plan)的关系。<conditioncondi=″tariffPlanID=?″>是本系统中一种描述实体间关系的配置语句,这种方式一般用来描述一对多的关系(还可以用其他方式描述一对一和多对多的关系)。其中condi属性是表示子实体和父实体进行关联的规则。<parameter>属性一般就是子实体的外键。同样的,还可以配置出资费-费率的关系。当实体信息和实体关系信息配置完成后,系统能够从实体配置文件中知道实体的两部分属性显示层属性和持久层属性。显示属性是实体在界面上的展现方式,而持久层属性则是数据读取、存储相关的属性。以查询为例,图5表示的是资费设置部分通用查询的调用和执行顺序1.用户在通用页面上发送查询请求,如查询套餐id为001的套餐及其下的资费和费率;2.控制器将查询请求转发到通用查询模块,通用查询模块是通用业务逻辑执行模块的一个子模块;3.通用查询模块从配置文件中获取实体信息,确定要查询哪些表的哪些字段,并确定实体之间的关联条件;4.通用查询模块通过实体信息构造出查询语句并进行查询处理;先查询套餐实体信息selecttariff_Plan_ID,tariff_Plan_name,statusfromt_tariff_planwheretariff_plan_id=‘001’对于所有查询出来的套餐(当然,在这个例子中只可能有一条记录),按照指定的套餐-资费的关系进行资费查询selecttariff_id,tariff_name,rule,startTime,endTimefromt_tariffwheretariff_plan_id=‘001’对于所有查询出来的资费,按照指定的资费-费率的关系进行费率查询。5.当所有的实体的查询出来后,将查询结果和控制权返回给控制器。6.控制器选择相应的视图进行显示,这里按照默认的树状图来显示(也可以指定其他显示形式)。7.通用视图模块读取实体信息中与视图相关的显示信息,确定要显示哪些字段及其显示方式,根据获取的信息把查询结果显示在页面上。图6就是在通用界面上以树状图方式显示的查询结果。如上所述,正是这种基于实体的机制,有效保障了视图和执行部分的自动生成,从而使二次开发者摆脱了程序编写。在本系统中,正常情况下,二次开发者只需要对实体配置文件、资源文件进行编辑,避免了编码和调试。随着通用化程度的提高,新的问题随之产生,即需求的多样性带来的问题。由于WEB界面展现方式、处理逻辑的多样性,简单的统一视图无法满足各类不同的需求。基于这个问题,以两种方式来解决1.在框架中加入多种处理逻辑,以满足绝大部分的需求本系统框架中封装了多种常用的功能逻辑,能满足绝大多数情况下的需求。如,对于一些比较孤立的实体,提供了列表方式进行展现,而对于一些彼此之间关系比较复杂的实体,提供树形结构进行展示,并提供一系列强大的功能方便操作,如拷贝、粘贴、克隆、相似创建等。2.提供可编程接口进行拓展当出现一些比较生僻、异常的需求,而框架不能支持的,可以自行开发该功能的视图或者定制逻辑执行模块,并在配置文件中注册这些模块,供控制器调用,就能将自己的功能加入框架了。通用模块不用修改,在二次开发时,只需要编写一个类,继承可编程接口,然后将这个类在配置文件中指明即可。显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。权利要求1.一种基于实体的软件框架系统运行方法,其特征在于,包括步骤系统启动后,控制器调用配置文件加载实体信息;用户通过通用视图模块发出请求,所述控制器将所述请求转发给通用业务逻辑执行模块,所述通用业务逻辑执行模块根据实体信息和用户请求中信息执行业务逻辑,向所述控制器返回执行结果;所述通用视图模块显示所述执行结果。2.如权利要求1所述的方法,其特征在于,所述实体信息包括实体基本信息和实体关系,述实体基本信息包括实体对应的表、实体包含的字段,实体的读取,存储属性。3.如权利要求1所述的方法,其特征在于,用户通过通用视图模块发出请求进一步包括步骤用户进入通用页面上发出请求,通用视图模块向控制器发送请求,所述控制器查询实体信息后,通用视图模块根据查询到的所述实体信息,生成视图界面,用户通过所述视图界面发送进一步的请求,所述请求包括数据信息。4.如权利要求1或3所述的方法,其特征在于,所述通用业务逻辑执行模块根据实体信息和用户请求中信息执行业务逻辑进一步包括步骤所述通用业务逻辑执行模块向所述控制器请求实体信息,控制器读取实体信息并返回给通用业务逻辑执行模块,通用业务逻辑执行模块根据实体信息和请求中信息执行业务逻辑。5.如权利要求1或2所述的方法,其特征在于,所述通用视图模块显示所述执行结果是控制器根据实体信息选择视图,通用视图模块按照默认方式显示,或查询实体信息中显示信息,根据所述显示信息显示。6.如权利要求1所述的方法,其特征在于,进一步包括步骤需增加新的视图或业务逻辑时,在所述配置文件中注册新增包含视图的实体信息或定制业务逻辑执行模块,重新加载所述配置文件。7.一种基于实体的软件框架系统,其特征在于包括通用视图模块,用于接收用户请求,并根据实体信息生成用户视图界面;通用业务逻辑执行模块,用于接收控制器转发来的用户请求,根据实体信息执行业务逻辑,并返回控制器执行结果;控制器,用于转发请求给通用业务逻辑执行模块,接收来自通用视图模块的请求,并向通用视图模块发送实体信息、视图信息或执行结果。8.如权利要求7所述的系统,其特征在于,所述控制器还包含配置文件读取模块,用于被控制器调用,以加载配置文件中的实体信息。9.如权利要求7所述的系统,其特征在于,所述通用视图模块包括JSP页面、封装视图功能的javabean和页面标签。10.如权利要求8所述的系统,其特征在于,所述系统还包括定制逻辑执行模块,所述定制逻辑执行模块在配置文件中注册,被控制器调用。全文摘要本发明公开一种基于实体的软件框架系统及运行方法,系统启动后,控制器调用配置文件加载实体信息;用户通过通用视图模块发出请求,所述控制器将所述请求转发给通用业务逻辑执行模块,所述通用业务逻辑执行模块根据实体信息和用户请求中信息执行业务逻辑,向所述控制器返回执行结果;所述通用视图模块显示所述执行结果。采用本发明方法,可实现基于本软件框架的快速二次开发。文档编号G06F9/44GK1924801SQ20061006270公开日2007年3月7日申请日期2006年9月21日优先权日2006年9月21日发明者成斌申请人:华为技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1