一种网络***软件体系框架及其实现方法
【技术领域】
本发明展现了一种网络***软件体系框架及其实现方法,主要用于信息技术IT(InformationTechnology)行业各种类型的企业应用网络***软件的快速高效开发设计,应用领域包括各类物联网***、车联网***、医疗/交通/安防监控***、智能家居***、电子商务/政务***、购物消费/查询支付***、金融证券交易***、企业/部门管理***、网络教育***、工农业过程检测控制***、航天测控***、军事指挥/设备监控***等方面。
【背景技术】
一般的Web浏览器企业应用网络软件***,常常采用业务数据库与浏览器B/服务器S(Brower/Server)三层软件架构的形式,虽然易于进行软件设计和编程实现,但是维护和升级起来十分麻烦,很多时候不得不重新做起来,更别提***扩展了。这种体系,概念混淆,术语混乱,框架与模式僵化,设计与代码编制很难理解,数据库构造工作量大,结构化查询语言SQL(Structured Query Language)运用繁琐,编程工作繁重,软件制作效率低下,对于小中型企业***还勉强凑合,对于中大型企业***就根本行不通了。现代Web浏览器企业网络软件***设计,迫切需要高效、实用、架构简单、易于实现、编程高度自动化、无关数据库设计的多层次通用性***软件体系。
本发明灵活运用“领域驱动设计DDD(Domain Drive Design)”的编程思想,合理组合新出现的现代软件设计工具,通过***软件体系架构工具的设计及其快速交互应用,实现了上述现代Web浏览器企业网络***软件设计的迫切需求,能够迅速使项目软件设计集中到具体的“业务行为逻辑实现”和“前端页面丰富”方面,以软件自动架构的方式,保证了***软件设计的极大简化高效和运行的最大稳定可靠,同时最低化维护成本并最强化***的可扩展性。
【发明内容】
1***软件体系框架设计
根据领域驱动设计DDD的思想,综合运用新出现的现代软件设计工具插件,采用分层架构的做法,围绕具体的业务逻辑,面向对象进行分析与设计,可以建立如图1所示的以具体应用逻辑业务领域为中心的四层基本典型Web浏览器企业应用网络软件***框架模型。
四层基本***软件层次从上到下依次是:表现层、服务层、领域模型层和基础框架层。
表现层(Presentation Layer)主要通过友好的用户界面UI(User Interface)向用户展示***软件体系必要的数据信息,同时接收用户的输入干预反馈。
服务层(Service Layer)提供对“领域模型层”业务的封装,通过网络或接口向“表现层”暴露粗粒度的逻辑业务服务。
领域模型层(Domain Model Layer)主要是展现业务领域的行为逻辑、业务处理状态以及实现业务的规则,同时也包含了领域对象的状态信息。领域模型层是整个应用程序的核心部分,它可以包含的概念和内容有:实体(Entities)、“值”对象(Value Objects)、领域服务(Domain Services)、仓储契约/接口(RepositoryContracts/Interfaces)等。
基础框架层(Infrastructure Layer)为“服务层”和“表现层”内的应用程序的数据存取提供服务,它可以是应用程序本身的“持久化访问”机制,也可以是外部***提供数据访问的Web浏览服务(Web Service),等。它提供了能被其它各层访问的通用技术框架,比如异常的捕获与处理、日志、认证、授权、验证、跟踪、监视、缓存之一或组合。这些操作通常会横向散布在应用程序的各个层面,面向方面编程AOP(AspectOriented Programming)关注的就是如何在不影响对象本身处理逻辑的基础上来实现这些横向的却又必不可少的功能点。应用实践中通过具体使用一些流行的拦截(Interception)框架(如Microsoft Unity、CastleDynamicProxy等)可以方便地实现AOP思想。
按照领域驱动设计的思想,领域模型通常建立在服务层中,这样能够更好地应对复杂与不断扩展的大型企业软件应用需求,然而实际应用中更多的是繁琐并不特别复杂的业务领域行为逻辑,把“领域模型”独立一层,既保持了领域驱动设计的“复杂应对与业务扩展”的优势,又可以加速软件体系的运行效率。一般说来,对于中小企业的软件开发应用,这四个层次就足够了;对于业务领域的拓展和中大企业的软件开发应用,还可以对“应用领域内业务逻辑行为的类型”细化,进一步把“领域模型层”展开为若干个层次,将基本的四层框架扩展N层框架。如此,整个软件框架模型,能大能小,适应性更强大。
此外,还可以在基础框架层采用“依赖注入IoC(Inversion of Control)”(通常称为“控制反转”)、工作单元(Unit of Work)、缓冲操作(Cache Manager/Process)等软件技术,使“领域模型层”上连服务接口/下接仓储进而通过实体框架(Entity Framework)、Hibernate等通信数据库,在“服务层”选用窗口通信基础WCF(Windows Communication Foundation)、“服务分层架构”Spring等技术,在“表现层”采用“窗口展现基础WPF”(Windows Presentation Foundation)、“快速Web应用”Struts II等技术,更进一步规范编程,实现软件框架代码编制的大部分自动架构,提高软件的执行效率,做到既用数据库又与数据库无关,减少人工编程带来的多数负面影响。
选用这种Web浏览器企业应用网络***软件模型,***软件项目设计就可以集中到具体的“业务行为逻辑实现”和“前端页面丰富”上面了。
在此基础上更进一步,结合ActiveX或者Applet技术,进行“瘦客户端应用”,“本地化”“服务层”的服务,还可以最大限度地简化设计、测试、部署及维护等各个环节。
2新软件体系科技说明
2.1框架模型的技术应用
架构的新软件体系,采用的主要新技术如下:
1)数据库动态生成技术和ORM框架
对于C#-ASP.NET应用,在“基础框架层”内采用新版的实体框架Entity Framework4.1持久化访问技术,进行code-first/model-first编程,实现数据库从代码生成,大大提升开发阶段数据库应对业务的变化能力;对于Java-J2EE应用,在“基础框架层”内采用类似的Hiberate-Ant-xDoclet持久化访问技术。同时在“基础框架层”内采用“目标对象映射ORM”(Object Relational Mapping)框架,隐藏数据访问的细节,使数据库交互变得简单易行,并且完全不用考虑具体的SQL语句应用,从而实现快速开发,避免因SQL操作而引发的各种人为问题。
数据库动态生成技术的采用和ORM框架的特点,达到了:实际数据库因业务逻辑从代码自动生成。
2)常用程序代码的自动发生与实现
常用程序代码段或文件,如简单静态“増/查/改/删CRUD”用户界面,可以由具体实际的“领域模型层”通过“表现层”的人机交互界面,及其相应“服务层”的服务,结合一些自动代码产生工具,快速得到。自动产生简单静态“増/查/改/删CRUD”用户界面,对于Java-J2EE的Eclipse-SSH/I开发应用,可以采用JunJava、JFrameClass或RapidGenerate等软件工具;对于C#-ASP.NET的VS-EF/nH开发应用,则可以采用MVC(Module/View/Control)脚手架软件工具。
常用程序代码的自动产生与实现,减少了人为错误和劳动强度,提高了编程设计的自动化程度。
3)一致的网络通信服务应用
对于C#-ASP.NET应用,服务层采用WCF技术,实现业务功能的网络传输,为多客户端应用场合提供统一的服务接口,避免了重复开发,使移动或固定简易终端、个人计算机终端等能够连网的客户端都可以访问统一的服务地址,实现***服务的一致性;对于Java-J2EE应用,服务层采用功能强大的“服务分层架构”Spring技术,实现同样的目的。
一致的网络通信服务应用,达到了:接口统一,服务一致,无重复开发。
4)面向方面编程AOP应用
对于C#-ASP.NET应用,在“基础框架层”内采用微软企业库的PolicyInjection模块来实现AOP。对于Java-J2EE应用,在“基础框架层”内采用集成有AOP功能的Spring技术。AOP和IoC是进行逻辑分离和降低耦合度最主要的方式。AOP技术,剖解封装的对象内部,将影响多个类的公共行为封装为一个可重用的模块,并将其名为“方面(Aspect)”。它把软件***分为两个部分:核心关注点和横向关注点。业务处理的主要流程是核心关注点,与之关系不大的部分是横向关注点。横向关注点,经常发生在核心关注点的多处,而各处都基本相似。通过AOP技术,实现了诸如日志、事务管理、权限控制等横向关注点的通用逻辑,可以专注于核心关注点,将精力投入到解决企业的商业逻辑上来。同时这些封装好了的横向关注点提供的功能可以最大限度地复用于业务逻辑的各个部分,既不需开发人员做特殊的编码,也不会因修改横向关注点的功能而影响具体的业务功能。
面向方面编程AOP应用,达到了:方面重用,核心明确,使软件开发更容易集中到业务逻辑实现。
5)依赖注入及其实现
分层架构的设计,层与层之间是松散耦合的,上层不会具体地依赖于下层,只是依赖于它的一个接口。这样,上层不能直接实例化下层中的类,而只持有接口;接口所指变量最终究竟是哪个类,则由依赖注入机制决定。对于C#-ASP.NET应用,在“基础框架层”内可以采用微软的Unity2.0实现依赖注入,它包括控制反转IoC、依赖注入DI(Dependence Injection)和拦截技术。对于Java-J2EE应用,在“基础框架层”内可以采用含有IoC等功能的Spring技术。
依赖注入及其实现,达到了:层间松散耦合,只是通过接口联系上下层。
6)前端页面的丰富绚丽
为使前端网页界面丰富绚丽,可以在“表现层”采用通用的JS(Java Script)、JQuery、Ajax、DIV(Division)+CSS(Cascading Style Sheet)、AS(Action Script)-Flash等技术实现导航、布局、感觉、视觉、动画、立体及其人机操作的简便和快捷。对于C#-ASP.NET应用,还可以在“表现层”采用功能强大的RIA(Rich InternetApplications)---WPF或Silverlight技术;对于Java-J2EE应用,还可以在“表现层”采用功能强大的Struts II技术。
前端页面的丰富绚丽,达到了:导航、布局、感觉、视觉、动画、立体。
2.2可能的技术应用与替代
数据库访问部分,采用了“基础框架层”的ORM框架可以有更多的选择:如C#-ASP.NET应用的nHibernate、Simple.Data等,Java-J2EE应用的iBatis等;中小型企业软件的开发,ASP.NET应用也可以使用传统的ADO.NET,J2EE应也可以使用传统的JDBC(Java Data Base Connectivity)。
网络访问部分,C#-ASP.NET应用,“服务层”除了采用较多的规范WCF技术,还可以根据***的规模采用Web Service等其它替代方案;Java-J2EE应用,“服务层”也可使用传统的URL(Uniform ResoureLocator)定位、Socket套接。
可重用模块部分,如日志、异常及验证等,ASP.NET应用,“基础框架层”除了采用“微软企业库”提供的一致功能,也可以为每一模块采用一些技术框架,如Log4net日志模块等,甚至自己开发。
IoC/AOP部分也有较多替代方案,C#-ASP.NET应用,“基础框架层”除了微软企业库Unity和PolicyInjection,也可以使用Castle Windsor、Spring.net、Autofac等技术。Java-J2EE应用的“基础框架层”相应选项就更多了。
新软件体系架构,还有很强的预留和伸缩空间,可以轻易更换或加入将来出现的众多的简便自动工具软件,实现自身的丰富完善和功能扩展。
3新软件体系优势说明
新软件体系架构,降低了***开发的复杂度,在设计、开发、测试、部署及维护等各个环节为应用***带来了高可用性、高延展性等正面效应,其巨大优势概括如下:
1)提高了***的可测试性:多层架构,层与层之间是低耦合的,增加了各层的独立性,也提高了可测试性,这样开发出来的***更加健壮。
2)简单化了解决方案的维护和管理:层内高内聚、层间低耦合的结构,使得***实现与分层组织方式变得非常灵活方便,维护和管理的直接、高效,显而易见。
3)增加了***的可移植性:企业软件开发中,许多模块都是可通用的,如日志、异常、缓存、验证模块等。通过分层,很容易分离出通用模块,便于迅速应用到其它的项目,展现了模板化的组织架构。
4)数据库由编码自动生成:软件框架采用最新的数据库自动操作技术,并融入ORM机制,实现了从代码生成数据库的强大功能,既使开发测试阶段的数据库也可以很容易地应对业务的变化,大大提高了开发效率。
5)能够对多种类型客户端提供一致功能服务:具体业务应用领域中有多种终端,如手持移动操控仪、立/挂式操控台以及个人计算机。软件架构设计中通过网络边界分离服务层和表现层,就可以轻易的使这些不同类型终端,获取统一的***功能服务。
6)增强***的可伸缩性:借助于分层的优势以及架构中各部分设计的高内聚性,各层自成模块体系,互相独立;增删各个独立的模块,不会影响到其它模块或层的功能,***的可伸缩性强大。
7)实现了编码自动化,避免了人为因素影响:软件框架采用了众多的网络编程新技术,实现了数据库访问的封装,日志、异常捕获以及AOP拦截等常用功能,减少了重复模块编码量,同时也避免了因人为因素导致的性能问题。
4趋向于“瘦客户端”的应用
新***软件体系架构,以最大限度地简化设计、测试、部署及维护等各个环节为目的,针对具有本地硬件的操作,趋向采用“瘦客户端”的架构,将“服务层”的服务“本地化”,即在Web浏览器中操作本地硬件。
在Web浏览器中操作本地硬件,新软件体系架构,对于C#-ASP.NET的应用可以通过“ActiveX-C/C++驱动”技术实现,对于Java-J2EE/J2ME的应用可以通过“Applet-JNI-C/C++驱动”技术实现。
传统的***软件,混合应用B/S和C/S(Client/Server)体系结构,通过C/S体系在现场的客户机终端上安装应用软件来操作本地硬件;开发设计上需要B/S和C/S两班人马,而且需要逐一客户端进行部署,维护起来也比较麻烦。采用了“瘦客户端”架构的新***软件体系,在Web浏览器中操作本地硬件,开发人员仅需要掌握并应用B/S机制即可,技术上易于精益求精,除了首次客户端运行时间长些外,没有部署环节,维护只需在服务端进行,无需每个客户端逐一进行,设计、测试、部署及维护等各个开发环节大大简化了。
【附图说明】
图1为新建的网络***软件体系框架示意框图。
图2为典型新***软件层和层间典型接口构造示意图。
图3为新***软件体系的典型基础项目树结构示意图。
图4为简易商品交易***的业务行为逻辑软件模块构造示意图。
图5为采用VS-EF/MVC工具的***应用软件自动构造的示意图。
【具体实施方式】
新***软件体系,结构清晰,层次分明,模块化规范,层间接口明了,很容易编程实现,而且易于实现自动软件体系架构。
***软件开发应用,目前主要采用两种通用的集成开发环境:
●Java-J2EE:Eclipse+StrutsII+Spring+Hiberate/iBatis,简称Eclipse-SSH/I;
●C#-ASP.NET:VisualStudio+EntityFramework/nHiberate,简称VS-EF/nH。
其中前一种是可以跨操作***平台的应用,后一种只能应用在微软的Windows操作***环境。
以SQLServer数据库为例,建立***软件集成开发环境的最少主要支撑软件如下:
●Java-J2EE:JDK、MyEclipse(Eclipse/SSH)、Tomcat、Ant、Xdoclet、SQLServer2008
●C#-ASP.NET:.NET4.0、VisualStudio2010SP1、ADO.NET Entity Framework4.1、Unity2.0/MicrosoftEnterpriseLibrary5.0、SQLServer2008、ASP.NET MVC3
在通用集成开发环境下,编程构造新***软件体系并实现针对具体的业务领域应用,其主要环节如下:
1新软件框架体系的实例化
构造的新***软件体系框架的具体实现方法,即新软件框架体系的实例化,主要是典型软件层和层间典型接口的构造,如图2所示。
典型软件层构造的主要工作如下:
首先建立抽象类型,主要是涉及领域模型概念的抽象类型或接口,如实体、值对象、仓储、工作单元、规约、等;
接着建立领域模型:根据领域驱动设计的规范,建立实际的领域模型,包括寻找对应的聚合、聚合根、值对象、等,还有定义相应的聚合根仓储接口;
以上两步建立“领域模型层”后,进而建立“基础框架层”,主要是实现“持久化访问”领域模型,大部分情况是数据库的访问,通常由“工作单元接口(Unit Of Work)”实现事务式的持久化,同时具体实现上述领域聚合根对应的仓储接口;
最后,实现“服务层”,针对业务行为的用例逻辑,向“表现层”的用户界面UI(User Interface)提供粗粒度的功能接口,通常通过调度领域模型来隐藏更细粒度的业务处理逻辑。
软件层间典型接口构造的主要工作如下:
●领域模型层接口,针对对象有:实体、值对象、仓储、工作单元、规约等;
●服务层接口,针对对象有:増/查/改/删CRUD(Create/Retrieve/Update/Delete)基本操作及其相关的业务功能;
●基础设施层接口,针对对象有:工作单元、领域聚合根仓储实现。
新***软件体系框架实例化,涉及的各个软件层和层间接口,无论是Java-J2EE的Eclipse-SSH/I开发,或是C#-ASP.NET的VS-EF/nH开发,都有规律可循,其简便快速实现有以下捷径:
●由设计的模板代码库中的典型程序段,进行拷贝并做简单对应更改,即设计成模板代码供给软件设计人员拷贝并略加变通使用;
●通过设计的含有简单友好人机交互的软件体系代码架构工具快速自动生成,这种方法设计效率高,脑力劳动强度低,人为错误少。
分别以Java-J2EE的Eclipse-SSH/I和C#-ASP.NET的VS-EF/nH构造的新***软件体系的基础典型项目树结构如图3所示。
2业务行为逻辑的简易实现
业务行为逻辑的简单实现过程如下:首先在领域模型层添加表达具体业务行为逻辑的需求,在服务层添加相应的粗粒度逻辑业务服务,进而通过IoC技术,面向接口编程,实现具体的接口类,连接层与层,将信息返回给“表现层”的用户界面UI,实现松耦合关联,做到代码重构。
具体实际的业务领域的行为逻辑及其服务,无论是Java-J2EE的Eclipse-SSH/I开发,或是C#-ASP.NET的VS-EF/nH开发,都有规律可循,其的简便快速实现有以下捷径:
●由设计的模板代码库中的典型程序段,进行拷贝并做简单对应更改,即设计成模板代码供给软件设计人员拷贝并略加变通使用;
●通过设计的含有简单友好人机交互的软件体系代码架构工具快速自动生成,这种方法设计效率高,脑力劳动强度低,人为错误少。
下面给出一个简易商品交易***,对其进行业务逻辑行为分析和具体应用领域层设计。该***经过简化后的业务逻辑行为是:商户交易流通节点注册;交易商品在流通节点做入场操作,形成“电子台账”;交易完成生成交易单,显示记录码,通过查询记录码,实现过程跟踪。其“领域模型层”的业务行为逻辑可以概括为:交易单实体、流通节点实体、台账实体和商户实体,进行C#-ASP.NET的VS-EF/nH***软件开发,相应的简要软件模块构造如图4所示。
3应用软件***的自动构造
主要是基本***软件体系的构造,包括具体应用数据库的自动生成和简单静态“増/查/改/删CRUD”用户界面的自动产生。
对于Java-J2EE的Eclipse-SSH/I开发应用,自动构造过程如下:
●使用Hibernate+Ant+Xdoclet,实现hbm配置文件和数据库从代码自动生成;
●采用JunJava、JFrameClass或RapidGenerate等软件工具,由代码生成基本的“增/删/改/查CRUD”简易静态用户界面。
对于C#-ASP.NET的VS-EF/nH开发应用,通过基于Entity Framework及其MVC3自动生成:
●基于EF(Entity Framework)Code First由代码自动生成数据库,包括必需的各个数据表及其关联;
●通过MVC(Module/View/Control)脚手架工具由代码生成基本的“增/删/改/查CRUD”简易静态用户界面。
针对上述简易商品交易***,图5显示了VS-EF/nH下通过Entity Framework与MVC3脚手架工具由简易人机交互窗口操作自动构造***应用软件的过程示意,其中左图是简易人机交互操作窗口,右图是产生的对应代码框架。
4增加网页界面的丰富渲染
主要针对主页面和上述产生的“增/删/改/查CRUD”简易静态用户界面,采用通用的JS、JQuery、Ajax、DIV+CSS、AS-Flash等技术,修改模板文件(如C#-ASP.NET的VS-EF/nH的_Layout.cshtml),更换界面效果,增加用户体验,达到导航、布局、感觉、视觉、动画、立体及其人机操作的简便和快捷,达到前端网页界面丰富绚丽,实现尽可能友好而益人的人机交互。
前端网页界面的丰富绚丽,对于C#-ASP.NET的VS-EF/nH开发应用,还可以采用功能强大的RIA---WPF或Silverlight技术;对于Java-J2EE的Eclipse-SSH/I开发应用,还可以采用功能强大的“快速Web应用”Struts II技术。
5添加本地硬件操作功能
新***软件体系,对本地硬件的操作,采用“瘦客户端”的架构,在Web浏览器中实现。
在Web浏览器中操作本地硬件,对于C#-ASP.NET的应用通过“ActiveX-C/C++驱动”技术实现,对于Java-J2EE/J2ME的应用通过“Applet-JNI-C/C++驱动”技术实现。
无论哪种开发应用,首先是针对相应的操作***,如Windows、Linux等,用C/C++编写特定硬件设备的驱动程序并进行调试,然后是ActiveX或JNI(Java Native Interface)封装及其调试,接下来是ActiveX控件或Applet应用程序的设计和调试,最后是在Web浏览器中对此ActiveX控件或Applet应用程序的调用。需要特别注意的是对ActiveX控件或Applet应用程序的权限的开放,开放权限后才可以被顺利引用。