应用程序框架设计心得

设计应用程序框架,三年的学习历程中一直在不断学习掌握J2EE体系架构各方面的技术及思想,不断拓展自己的应用技术及设计思想的深度与广度。根据实际情况,尝试设计一套新的应用程序框架,在这里讲述在设计应用程序框架上的一点心得。
先明确一下“程序框架(Framework)”和“软件架构(Architecture)”之间的区别,简单地说,程序框架是一个可以实际应用的代码集合,而软件架构可以看作是一种抽象的设计。另外,两者的关注面也不一样,程序框架热衷于解决实际运行过程中的问题,甚至会提供工具包或者辅助模块(比如日志系统),而软件架构则集中精力在各个部分(模块、组件等)之间的关系。两者其实是关于同一个事情的不同层次的东西。在设计程序框架时,需要很好的掌握软件架构的设计思想,软件架构的设计思想很复杂,从编码层面的认识,我认为Gof的23个设计模式思想很好的阐述了软件架构的设计思想,Jive(JAVA开源论坛)是学习GoF设计模式最好案例之一。通过这些设计思想来指导构架程序框架,也就是设计应用程序框架的过程。
那到底为何需要去设计程序框架呢?
在开发中曾发觉很多方面非常的不顺手,几乎每一个环节都存在这样或者那样的问题:
 不同项目组做的设计有不同的风格,而且框架设计做不细,导致开发中经常要不断的复制、粘贴,框架越来越流于形式;
 各层代码凌乱,从后台的java到前台的html(JS),天马行空,随心所欲,没有一致的代码结构,增加了维护成本和管理成本;
 框架所采用的各种开发组件杂乱无章,使得系统臃肿,增加服务器的性能负担,又提高了学习成本。
通过了解和研究目前我所接触过的框架,发现并没有合适的框架可以解决发现的问题,但在寻找框架的过程中,学习的各个框架的技术和思想,溶合各家之长,结合业务需求,设计一套框架。这里,先讲述一下两套优秀的开源框架Appfuse,SpringSide。
Appfuse是一个开放源码的项目和应用程序,也是一个指导性的入门级J2EE框架,它对如何集成流行的Spring、Hibernate、iBatis、struts、Xdcolet、junit 等基础框架给出了示范。Appfuse的最大亮点是AppGen 生成代码,通过深入研究其“AppGen 生成代码”的源代码,学会了如何通过Ant 和 XDoclet 来编写代码自动生成工具。目前许多业务系统所用的开发框架就来源于Appfuse,开发就常使用其自动生成工具进行代码生成和配置,带来了不少的方便,而且该框架是成熟的开源框架,性能和安全方面不存在问题,在设计框架也可以根据Appfuse进行了重新构造。
SpringSide以Spring Framework为核心,提供一个实际的企业应用的开源构件库。它以RoR式的简约风格,将Java社区众多优秀轻量级开源项目整军为一个黏合的框架,以构件式的开发架构,配合Ant与Eclipse plugin的生成工具,作为大家开发Java企业应用的方便起点。SpringSide提供了很先进的代码管理思想,特别是构件式的开发架构——将系统核心的基础代码组装成JAR构件包发布到各个应用系统中,统一维护基础构件代码。SpringSide在代码编程提供了复用性高的简洁代码结构,仔细研究其代码,可以学习到很多设计模式思想。在设计框架中可以采用了SpringSide的思想。
下面讲述一下在设计框架中所采用的技术思想及其处理的问题。
1、自动生成代码,从Appfuse提供的“AppGen 生成代码”得到了体会与帮助,在设计框架中为框架设计了一个自动代码工具,并且提供可扩展的功能。自动生成代码,可以从业务需求的代码中提取编写模板,以后程序员要编写相关的业务需求代码时,便可借助已编写好的模板,通过Ant输入命令,来完成基本的代码生成与配置,之后的主要精力就进行业务数据的运算,这样则可不需进行大量的复制与粘贴,可以减少50-60%代码编程量。采用代码自动生成还有另外好处,则生成的代码,基本上完成了业务处理的代码编写“排版”,不同项目组在设计风格可借助这个功能来达到一致的目标。
2、提取编写模板,这是自动生成代码的基础,没有模板也就无法生成代码,提取编写模板首先需要对整个业务模块有很好的掌握,同时也需要有较深的编程功底,编写出来的模板代码要高质量,因为模板编写后其他成员所做该业务模块,都是在模板代码的基础上,其实,模板也是一个规范。项目开发中,一般模板量也不会很多,而且不同项目之间还能共用模板,如主从表的业务单据处理,这是最常用的业务,把这业务代码提取成了模板,则在所有项目中都可以用到。
3、以构件式的模式设计架构,在构思框架时结合了实际的业务系统,将一个业务系统分成三个构件:一、框架核心构件;二、业务公共构件;三、业务处理框架。
 框架核心构件就是将框架的骨架代码抽提出来自成一个工程,然后将工程打成JAR包插入到业务框架中,这样些工程就只做修改框架的核心代码,有需要升级则重新生成一个JAR包,发布到所有的业务框架中,这样可以减少项目的维护成本。
 业务公共构件实际就是业务框架了,只是该业务比较特殊,是整个项目的公共业务(方法)。在不少公司的项目中,由于项目的复杂性,常将一个项目分成多个工程后利用SSO将各个工程无缝的构合起来。正由于这情况,各工程之间将存在一些公共的业务,如果在每个工程里面都编写这个公共业务,将增加整个项目的维护成本,然而可以有效的处理这种业务,可以有两种较好的选择:一、采用SOA;二、采用公共构件模板。在框架中有提供Web Service(SOA的实现模式之一)的处理接口,同时也有可以采用业务公共构件模块,但用Web Service需要消耗网络带宽,也增加了服务器的反应时间。而所谓的业务公共构件也就是将公共的业务独立成一个工程,以JAR模块来向各个工程发布构件,同框架核心构件是一样的设计思想,只不过框架核心构件是面对所有采用框架的工程,而业务公共构件是面对项目中的所有工程。
 业务处理框架主要就是处理实际上的业务,其实也就是一个应用工程,由于框架核心代码及业务公共代码被提取成构件,在业务框架剩下的都是处理业务相关的代码,这样框架也显示简洁,维护成本和管理成本都得到减少。
4、运用设计模式思想对代码进行抽象封装,实现高重用性,也减少维护成本,方便对代码的有效管理。这方面涉及的主要是编程代码的设计思想,同时也运用各种编程技术,如Spring的AOP与Ioc(AOP主要属于代理设计模式,Ioc主要属于工厂设计模式)。在设计框架,几乎每写一句代码都要考虑到这些内容,所为的就是要使得框架高效、简洁、优雅。举个例子:对于EXT的前台Grid分页列表操作,一般直接采用EXT提供的标准方法编写,大概需要花耗100行的代码,而且几乎每次要编写Grid时,都是从别的地方进行复制,然后再粘贴,这个过程已经显示麻烦了,消耗有效工作时间。大量代码可以通过复制、粘贴来实际,就说明这些代码不够简洁,需要进行处理,这时可以结合上业务的需求对EXT进行二次开发,简化代码处理流程,提高工作效率。
5、充分使用各种组件,避免杂用组件。在各种组件中,其实存在很多的共同性,开发中有时因为对不了解组件的功能而再去选择采用来其他组件来完成本来组件已有的功能,或者是说为了方便而采用其他组件,但这样是无意中使得系统臃肿,增加服务器的性能负担,又提高了学习成本。举个例子:目前很流行采用EXT+DRW来进行AJAX数据传输,这样做就是这了方便,但这样带来了问题采用DRW,客户端就需要下载DRW的核心脚本以及业务脚本,增加了网络负荷;在服务器端又需要DRW处理代码生成DRW的脚本,增加了服务的负担;同时在代码维护方面又需要维护前页脚本以及后面的DRW配置,增加了维护成本;对于程序员又需要同时学习EXT以及DRW,增加了学习成本。对于决解这些问题呢,我们可以设计框架时后台通过抽象封装处理方法,前台再对EXT进行二次开发来解决,能实现得比较EXT+DRW更方便、更简洁。
要设计好一套框架不是简单的事情,需要考虑的问题是方方面面的,特别是服务器的稳定性与性量方面,一套好的框架也是需要在实践中不断的“磨练”。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值