`
zxb_fish
  • 浏览: 3983 次
  • 性别: Icon_minigender_1
  • 来自: 广州
文章分类
社区版块
存档分类
阅读更多
    设计应用程序框架,三年的学习历程中一直在不断学习掌握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项目应用框架原理与程序设计.rar

    内容涵盖框架设计原则、架构模式、系统组件及通信机制等核心知识,结合实例引导读者逐步探索Android应用的构建过程。 资源特点: 1. 内容丰富:从基础概念到高级技术,全面覆盖Android应用框架的各个方面。 2. ...

    VC++学习笔记与心得

    学习的心得 从VC的SDK平台到MFC框架的构成,到界面设计,已经应用

    java课程设计心得体会.docx

    java课程设计心得体会全文共3页,当前为第1页。java课程设计心得体会全文共3页,当前为第1页。java课程设计心得体会 java课程设计心得体会全文共3页,当前为第1页。 java课程设计心得体会全文共3页,当前为第1页。 ...

    Visual+C++程序设计学习笔记

    全书一共用了 12章来全面讲解 Visual C++基本知识,内容包括 Visual C++ 6.0集成开发环境,基于MFC的应用程序框架,对话框和菜单的创建和使用方法,常用控件的使用方法,GDI对象以及文字操作的文本和字体类,多线程...

    《Android应用开发》开放实验项目总结报告-模板.doc

    通过Android应用开发的开放实验学生可以熟悉Android应用程序开发的工 " "具、开发语言和开发方法,为今后深入学习甚至进行实际App开发做好技术上的" "准备。 " "2.开放实验项目的任务与要求: " "学生理解Android...

    VHDL语言100例源码 VHDL学习资料VHDL 编程要点VHDL编程心得体会.zip

    第60例 转换函数在元件例示中的应用 第61例 基于同一基类型的两分辨类型的赋值相容问题 第62例 最大公约数的计算 第63例 最大公约数七段显示器编码 第64例 交通灯控制器 第65例 空调系统有限状态自动机 第66例 FIR...

    ios开发介绍及心得.docx

    iOS开发是针对Apple公司的iOS操作系统(iPhone、iPad等设备)的应用程序开发。它主要使用Swift和Objective-C两种编程语言,并借助Xcode集成开发环境进行开发。以下是一些iOS开发的核心概念以及我的一些心得体会: #...

    javaee 实验报告 实验一 JSP+Servlet+Javabean+jdbc-基于MVC模式的数据库的应用

    javaee 实验报告 实验一 JSP+Servlet+Javabean+jdbc-基于MVC模式的数据库的应用 实验二 JSF+JPA实现用户注册 实验三 struts+spring+hibernate框架访问数据库的应用 实验四 使用WebService和EJBean访问数据库的应用

    C#实训教程

    1.3 如何用.NET Framework编写应用程序 8 1.4 MSIL和JIT 8 1.5 程序集 9 1.6 托管代码 9 1.7 垃圾回收 9 1.8 链接 10 1.9 实例分析 11 1.10 内容总结 13 1.11 独立实践 14 2 C#基础 15 2.1 面向对象基本概念 15 2.2 ...

    JAVA中spring详细知识,学习心得以及一个例程

    Spring 是一个开源的轻量级的 Java 开发框架,提供了全面的基础设施支持,可以帮助开发者快速...Spring 框架采用了模块化的设计,开发者可以根据自己的需求选择性地使用框架的不同模块,从而使应用程序更加灵活、高效。

    基于Java的远程视频会议系统

    基于RTP协议的RTP应用程序框架为实现流媒体在网络中实时传输提供了Java程序框架,应用它可方便的实现多媒体数据流在网络中的实时传输。实时传输协议RTP是在Internet网上针对多媒体数据流的一种传输协议,RTP被定义为...

    MFC学习心得

    微软基础类库(英语:Microsoft Foundation Classes,简称MFC)是微软公司提供的一个类库(class libraries),以C++类的形式封装了Windows API,并且包含一个应用程序框架,以减少应用程序开发人员的工作量。...

    ssm项目汉中茗茶微系统设计与实现修改微信小程序代码pf.zip

    SSM项目汉中茗茶微系统设计与实现修改微信小程序代码pf.zip是一个使用Java语言开发的Web应用,它采用了SSM(Spring Spring MVC MyBatis)框架,并结合了微信小程序前端技术。该系统旨在为用户提供一个便捷的在线茶叶...

    微信小程序项目源码-南宁周边乡村游微信小程序+ssm框架+论文.rar

    本项目为一款基于微信小程序的南宁周边乡村游应用,结合SSM(Spring、SpringMVC、MyBatis)框架进行开发,旨在为用户提供一站式的乡村游体验。项目涵盖了丰富的功能,以满足用户对周边乡村游的各种需求。 首先,...

    [计算机毕业设计]微信小程序基于ssm平台开发的124智慧乡村旅游服务平台设计与实现+ssm--论文(附程序源码和开发文档)

    微信小程序“124智慧乡村旅游服务平台”是基于SSM(Spring、SpringMVC、MyBatis)框架开发的一款专为乡村旅游打造的服务应用。该平台致力于提升游客体验,促进乡村旅游业的发展。 核心功能包括: 1. **智能推荐**...

    计算机专业毕业设计-微信小程序案例-微信小程序的青少年素质教育培训系统-毕设源码+说明文档.rar

    这是一个关于计算机专业毕业设计的微信小程序案例——《微信小程序的青少年素质教育...总之,《微信小程序的青少年素质教育培训系统》是一个具有实际应用价值的毕业设计案例,可为同学们提供一个很好的学习和实践平台。

    asp.net知识库

    将 ASP.NET 2.0 应用程序服务配置为使用 SQL Server 2000 或 SQL Server 2005 ASP.NET 2.0 中的数据源控件 使用 ASP.NET 2.0 ObjectDataSource 控件 ASP.NET 2.0 的内部变化 使用SQL Cache Dependency 代替 ...

    毕业设计-基于SSM的mysql-校园图书在线阅读系统-设计与实现(源码 + 数据库 + LW + 演示视频).zip

    本文借助SSM框架以及Mysql数据库开发设计一款针对在线图书阅读的系统,用户可以通过在线图书借阅实现书籍内容的在线阅读,同时结合JSP技术的应用实现了在线阅读系统平台的动态数据响应,帮助在校学生实现更加便捷的...

    数据库人事管理系统课程设计报告.doc

    在软件开发的过程中,随着面向对象程序设计和数据库系统的成熟,数计成为软件开发的 核心,程序的设计要服从数据,因此教学管理系统的数据库设计尤其重要。本文主要介 绍教学管理系统的数据库方面的设计,从需求分析...

    课程设计----基于于JAVA的记事本编辑器的设计与实现.doc

    认真按时完成课程设计报告,课程设计报告内容包括:课程设" "计目的、设计任务与要求、设计说明书、设计成果和设计心得五个部分,具体要求见设计报 " "告模板。 " "通过这次设计,要求掌握以下内容: " "面向对象...

Global site tag (gtag.js) - Google Analytics