设计应用程序框架,三年的学习历程中一直在不断学习掌握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更方便、更简洁。
要设计好一套框架不是简单的事情,需要考虑的问题是方方面面的,特别是服务器的稳定性与性量方面,一套好的框架也是需要在实践中不断的“磨练”。
分享到:
相关推荐
内容涵盖框架设计原则、架构模式、系统组件及通信机制等核心知识,结合实例引导读者逐步探索Android应用的构建过程。 资源特点: 1. 内容丰富:从基础概念到高级技术,全面覆盖Android应用框架的各个方面。 2. ...
Java 程序设计不仅是学习一门编程语言,更是一种技术和思维的锻炼。Java 以其强大的跨平台能力、面向对象的设计理念以及丰富的类库,成为众多开发者首选的编程语言。对于初学者来说,Java 的学习过程可能会充满挑战...
Mate框架支持模块化开发,这意味着开发者可以将复杂的应用程序分解成多个独立的、可重用的模块,每个模块负责特定的功能,这有助于代码组织,便于团队协作和后期维护。 2. **松耦合**: 松耦合是Mate框架的重要...
框架是一种预先编写好的代码库,它提供了一种结构,可以帮助开发者快速构建Web应用程序,减少重复性工作,提高开发效率。Laravel作为PHP的热门框架,以其优雅的设计理念、强大的功能和丰富的社区支持而闻名。 ...
在嵌入式系统中,使用iTRON类操作系统(OS)设计的系统模块,特别是中间件和应用程序,往往是以任务(TASK)的形式存在的。这是因为iTRON OS的一个突出特征是在任务管理上,能够支持多任务操作,每个任务具备一个或...
- **理解与掌握ASP.NET技术**:实训旨在帮助学生深入理解ASP.NET这一强大的Web开发框架,并能够运用它来构建动态的Web应用程序。ASP.NET是由微软公司推出的一种用于开发Web应用和服务的技术,它允许开发者使用.NET ...
1. **自顶向下、逐步求精**:从整体到部分,先设计程序的总体框架,然后逐步细化每个模块的功能,直到实现具体的细节。 2. **三种基本控制结构**:程序由顺序结构、选择结构(条件分支)和重复结构(循环)这三种...
Android平台由多个层次构成,包括Linux内核、硬件抽象层(HAL)、系统运行库、应用程序框架以及应用程序本身。Linux内核作为底层支撑,提供设备驱动和系统服务。HAL使得上层软件能与不同硬件交互。系统运行库包含了...
其核心设计思想旨在解决传统Java应用开发中存在的复杂性问题,通过一系列的特性改进了Java应用程序的开发效率和质量。 **1. 控制反转(Inversion of Control, IoC)** - **定义**: IoC是一种设计模式,用于降低...
首先,我们要了解C#是一种面向对象的编程语言,由微软公司开发,主要用于Windows平台的应用程序开发。它拥有丰富的特性和强大的性能,是.NET框架的重要组成部分。C#语法简洁明了,支持类、接口、继承、多态等面向...
在Windows程序设计中,Visual C++是一个常用的开发工具,它提供了一个强大的IDE(集成开发环境)和MFC(Microsoft Foundation Classes)库,使得Windows应用程序的编写变得更加方便。本实验旨在帮助学生熟悉这个环境...
3. **Session 管理**:Shiro 的Session管理可以与应用程序的Session协同工作,也可以独立管理,提供了基于缓存的分布式Session支持。 4. **Caching**:Shiro 支持缓存管理,可以将权限信息等缓存到内存、数据库或...
在这个MFC课程设计中,学生被要求开发一个简单的计算器应用程序,该程序旨在加深对Windows编程基础知识,MFC(Microsoft Foundation Classes)应用框架的理解,并实践面向对象编程的基本原理。此外,这个项目也是...
全书一共用了 12章来全面讲解 Visual C++基本知识,内容包括 Visual C++ 6.0集成开发环境,基于MFC的应用程序框架,对话框和菜单的创建和使用方法,常用控件的使用方法,GDI对象以及文字操作的文本和字体类,多线程...
它们各自在不同的层面上提供了强大的功能,帮助开发者构建高效、可维护的Web应用程序。 Struts是MVC(Model-View-Controller)设计模式的一个实现,主要负责控制层的工作。它通过ActionServlet来处理HTTP请求,将...
在本Java课程设计中,学生以计算器和文本编辑器为主题,深入学习了如何利用Java语言构建实际的应用程序。设计过程涵盖了软件开发的基本流程,包括需求分析、设计与类划分、编码实现,以及用户体验的考虑。 1. 需求...
C#,全称为C Sharp,是由微软公司推出的面向对象的编程语言,被广泛应用于Windows桌面应用、游戏开发、Web服务以及移动应用等多个领域。作为.NET框架的重要组成部分,C#结合了C++的强类型系统和Java的简洁性,提供了...