Web应用程序开发方法研究

19 篇文章 2 订阅

Web应用程序开发方法研究

 

摘要:如今已进入了web2.0高速发展的网络时代,各种基于互联网的Web应用程序如雨后春笋般出现。近几年,Web开发技术层出不穷,日趋成熟。本文介绍了Web技术的前世今生,对计算机科学前辈们孕育的软件设计模式、JavaEE平台下的流行开发框架进行了分析。总结了Web应用程序开发的一般步骤,提出了将软件复用技术,经典设计模式、开源框架合理应用于程序开发以达到高效开发大型Web项目的思路。

关键词: Web应用程序  软件复用   设计模式    MVC   

 

一、Web应用程序概述

    Web应用程序首先是“应用程序”,它和用标准的程序语言,如C、C++等编写出来的程序没有什么本质上的不同。然而Web应用程序又有自己独特的地方,就是它是基于Web的,而不是采用传统方法运行的。换句话说,它是典型的浏览器/服务器架构的产物。纵观历史,Web技术经历了以下几个发展阶段。

 客户端技术

1、用超文本技术(HTML)实现信息与信息的连接。用统一资源定位技术(URI)实现全球信息的精确定位;用新的应用层协议(HTTP)实现分布式的信息共享。2、JavaApplets和JavaScript语言随心所欲地丰富HTML页面的功能。

3、真正让HTML页面又酷又炫、动感无限的CSS(Cascading Style Sheets)和DHTML技术。

 服务器端技术:

 1、CGI(CommonGateway Interface)技术。CGI技术允许服务端的应用程序根据客户端的请求,动态生成HTML页面,使客户端和服务端的动态信息交换成为了可能。早期的CGI程序大多是编译后的可执行程序,其编程语言可以是C、C++、Pascal等任何通用的程序设计语言。后来的Perl语言结合了C语言的高效以及sh、awk等脚本语言的便捷,很快,Perl在CGI编程领域的风头就盖过了它的前辈C语言。随后,Python等著名的脚本语言也陆续加入了CGI编程语言的行列[9][13]

 2、专用于Web服务端编程的PHP(Personal Home Page Tools)语言。PHP语言将HTML代码和PHP指令合成为完整的服务端动态页面,Web应用的开发可以用一种更加简便、快捷的方式实现动态Web功能。

3、Microsoft借鉴PHP的思想,在其Web服务器IIS 3.0中引入了ASP技术。ASP使用的脚本语言是我们熟悉的VBScript和JavaScript。

4、Servlet技术问世,JSP技术诞生。Servlet和JSP的组合(还可以加上JavaBean技术)让Java开发者同时拥有了类似CGI程序的集中处理功能和类似PHP的HTML嵌入功能,此外,Java的运行时编译技术也大大提高了Servlet和JSP的执行效率[15][16]

两种重要的企业开发平台:

  Web服务端开发技术的完善使开发复杂的Web应用成为了可能。两个最重要的企业级开发平台——J2EE和.NET在2000年前后分别诞生于Java和Windows阵营,它们随即就在企业级Web开发领域展开了你死我活的拼争。平台针锋相对的竞争关系促使了Web开发技术以前所未有的速度提高和跃进。J2EE是纯粹基于Java的解决方案,J2EE体系及相关的软件产品已经成为了Web服务端开发的一个强有力的支撑环境。和J2EE不同的是,Microsoft的.NET平台是一个强调多语言间交互的通用运行环境。ASP.NET超越了ASP的局限,可以使用VB.NET、C#等编译型语言,支持WebForm、.NET Server Control、ADO.NET等高级特性。可以说.NET平台中的ASP.NET是Web开发技术在Windows平台上的一个集大成者。

XML语言及相关技术:

   XML语言对信息的格式和表达方法做了最大程度的规范,应用软件可以按照统一的方式处理所有XML信息。这样一来,信息在整个Web世界里的共享和交换就有了技术上的保障。HTML语言关心的是信息的表现形式,而XML语言关心的是信息本身的格式和数据内容。从这个意义上说,XML语言不但可以将客户端的信息展现技术提高到一个新的层次,而且可以显著提高服务端的信息获取、生成、发布和共享能力。

   可以预见的是,在未来的几年里,还会有许多新的开发技术或开发平台出现。从静态技术到动态技术,从开发平台到应用模型,从传统Web到语义化Web……为了让更多的人获得更有价值的信息服务,Web开发者们也许还会经历一次又一次的技术浪潮,还会面临更为严峻的技术挑战。

 

二、基于JavaEE平台的Web开发技术

在基于JavaEE阵营的web应用开发过程中,JSP/Servlet是主要的实现技术。但是JSP并没有很好地实现业务逻辑与用户界面的分离,符合MVC设计模式的Struts框架很好地解决了这一问题。这里首先对MVC设计模式进行概要介绍,然后对Struts、Hibernate等框架应用的主要思想进行详细的描述。

 

1、MVC设计模式

MVC(ModeI—View—Controller),即把一个应用按照Model,View,Controller的方式进行分离,这样一个应用被分成三个层一模型层、视图层、

控制层,如图1所示:

 

 

 

 

 

 

 

 

 

 

 

 

 


(1)视图层

视图(View)代表用户交互界面,MVC设计模式对于视图的处理仅限于视图上数据的采集和处理以及用户的请求,而不包括对视图上的业务流程的处理。

(2)模型层

模型(Model)就是业务流程/状态的处理以及业务规则的制定。模型接受视图请求的数据,并返回最终的处理结果。业务模型的设计是MVC最主要的核心。(3)控制层

    控制(Controller)可以从用户接收请求,将模型与视图匹配在一起.共同完成用户的请求,可将其视为一个分发器.控制层并不做任何的数据处理。MVC设计模式达到了分而治之的目的,但是在具体实现上并不是千篇一律。比如我们熟悉的Struts框架只是其中的一种实现[13]

 

2、流行Web开发框架介绍

软件系统发展到今天已经很复杂了,特别是服务器端软件,涉及到的知识,内容,问题太多。在某些方面使用别人成熟的框架,就相当于让别人帮你完成一些基础工作,你只需要集中精力完成系统的业务逻辑设计。框架,即framework,其实就是某种应用的半成品,把不同应用程序中有共性的一些东西抽取出来,做成一个半成品程序,这样的半成品就是所谓的程序框架。这样每次开发就不用白手起家,而是可以在这个基础上开始搭建。

使用框架的最大好处:减少重复开发工作量、缩短开发时间、降低开发成本。同时还有其它的好处,如:使程序设计更合理、程序运行更稳定等。基于这些原因,基本上现在在开发中,都会选用某些合适的开发框架,来帮助快速高效的开发应用系统。

 常见的JAVA框架:

(1)Struts框架

Struts是一种基于Java的技术。web应用程序开发人员通过Struts即可充分利用面向对象设计、代码重用以及“编写一次、到处运行”的优点,它是使用Servlet和JSP技术的一种MVC实现。Struts本质上是一款开源软件。Struts的作用是为了帮助我们减少在运用MVC设计模型来开发Web应用的时间。如果我们想混合使用Servlet和JSP的优点来建立可扩展的应用,Struts是一个不错的选择[5]

(2)Spring框架

Spring 也表示是一个开源框架,是为了解决企业应用程序开发复杂性由Rod Johnson创建的。框架的主要优势之一就是其分层架构,分层架构允许使用者选择使用哪一个组件,同时为 J2EE 应用程序开发提供集成的框架。Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益[6]

(3)Hibernate框架

Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。 Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可在Servlet/JSP的Web应用中使用,最具革命意义的是,Hibernate可以在应用EJB的J2EE架构中取代CMP,完成数据持久化的重任[5]

(4)SSH框架

SSH为struts+spring+hibernate的一个集成框架,是目前较流行的一种Web应用程序开源框架。集成SSH框架的系统从职责上分为四层:表示层、业务逻辑层、数据持久层和域模块层,以帮助开发人员在短期内搭建结构清晰、可复用性好、维护方便的Web应用程序。其中使用Struts作为系统的整体基础架构,负责MVC的分离,在Struts框架的模型部分,利用Hibernate框架对持久层提供支持,业务层用Spring支持。具体做法是:用面向对象的分析方法根据需求提出一些模型,将这些模型实现为基本的Java对象,然后编写基本的DAO接口,并给出Hibernate的DAO实现,采用Hibernate架构实现的DAO类来实现Java类与数据库之间的转换和访问,最后由Spring完成业务逻辑[5]

 

三、Web应用软件复用性的探讨

从上面提到的开发框架产生的背景中可看出,随着软件规模的不断扩大,其复杂度将不断提高。随着时间的推进,技术的进步,开发者们从其他工业领域借鉴的经验中认识到只有实行软件工业化生产.才能满足日益增长的软件需求。同时不断提出各种技术、理论和方法来开发软件,希望以最小的人力、物力和财力资源来获得更大的软件生产规模以及更可靠的软件质量[1]

(1)基于构件的软件复用

在众多的软件复用开发方法中,基于构件的软件开发方法是一条有效实际的软件复用途径。所谓构件是指系统中可以明确辨识的构成成份,软件构件是系统中具有一定意义的独立构成成份。

构件应具备的基本特征:(1)复用:复用是构件最基本的性质。构件的设计必须满足能在新的应用项目中使用;(2)封装:是对外界隐藏构件的设计和实现细节,仅通过接口与外界交互,可以保证构件功能复用的完整性和构件开发及交互的独立性;(3)组装:构件可以通过组装形成新的构件或系统,组装是构件复用的手段;(4)粒度:构件是有大小的,与领域相关的构件粒度大;(5)层次:构件可以按层次进行划分,企业级应用系统的复杂逻辑可以通过分层来解决[2]

开发某个应用时,在设计各个模块、类等时就要注入软件重用的思想,因为在软件设计分析阶段的软件复用更有通用性和重用性。这样就能设计出重用性相对较高的复用构件。并方便构件库的设计.在以后进行类似系统开发时,可以根据需求从构件库中选取合适构件直接加以复用,而不用重新设计开发。在构件库中查找不到的情况下,按照软件复用的思想设计新的复用构件,并加以存储[1]

 (2)基于范式抽象的软件复用

所谓范式就是抽象的解决方案模板,它可在不同具体项目中使用。范式抽象就是在此基础上提出的对范式的设计方法。针对不同的问题域,就应该有与之对应的设计方法,这样可以使范式的设计达到很高的重用性。针对面向对象分析阶段具体现状,总结出下列范式抽象方法[4]

(1)关系抽象 

针对具体的项目,会分析出大量的关系模型。例如在学校排课表系统中,需要定义教师类,它包括教师姓名、性别、职称等有关教师的基本信息,同时,为了便于教师很快得出自己的上课表,还需要定义一个与教师对应的教师课表类,这个类显示了一周中教师的课程安排情况;在网上购物系统中,需要定义一个购物者类,包括了购物者的相关信息,同时为了得到购物者所购的物品,还需定义一个购物车类,该类描述了购物者与所购买的物品的对应关系。这两个系统的具体业务是不同的,但教师类与教师课表类、购物者类与购物车类的关系却是基本相同的,都是一个实体对另一个实体的拥有关系,同样,所进行的操作也基本相同,诸如都涉及到对所拥有实体的查询操作等。因此可将这种关系抽象出来,定义为拥有关系,然后在此关系的基础上定义相应的操作。这种关系就可以以范式的形式保存起来,在不同的项目中都可重用这种范式。同样,还可抽象出许多其他的关系范式,如实体——内容关系,上下级关系等。这些关系都是不依赖于具体的项目和业务的,可重复使用,只是在针对具体的业务时,在相关属性和方法上稍作修改就可以了[3]

(2)相似对象抽象 

在不同项目的OOA阶段,还会分析出大量的相似对象或类,例如用户、用户组、角色、权限等在所有涉及到权限管理的系统中都会出现这类对象;在一些相同领域的项目中,由于涉及的领域的标准化,有些对象的相似性以及相同的机率会更大。对于这些相似程度如此大的对象来说,由于其在项目开发中的相对独立性,把这些对象模型以范式的形式保存起来会使分析的结果得到更大的重用[3]

按照上述思想进行的范式抽象称为相似对象抽象,这种抽象依据的是分析阶段的对象模型,这种对象模型具有独立的、高度的相似性,抽象出来的范式可称为对象范式。这种范式与具体项目之间的相似可称为表面相似性。表面相似越接近,范式的重用性就越大。

 

四、浅谈软件设计模式

    首先引出模式的概念:对于某领域内的专家知识和成功经验的文档记录以及总结,这样的经验在特定的环境下对于某类问题具有广泛的适用性,并且模式定义了一组和成功经验以及问题解法相关联的词汇[8]。在辩证法的角度来看:模式是广义化的并可重复使用的人类经验总结,从这一角度来看,软件工程领域的软件重用概念与模式的理论是相通的。软件设计模式其实就是“程序员进行面向对象代码重用时的一种技术手段,进而成为程序员之间、各项工程之间的通讯手段”。软件设计模式属于在更高层次上对程序代码、程序流程图的抽象,是对软件编程思路、软件设计流程的另一种表述。随着计算机科学技术发展,前辈们多年来的智慧结晶创造出了一些经典的设计模式。如创建型的单件模式、工厂模式,结构型的适配器模式、外观模式,行为型的迭代器模式、命令模式、状态模式、解释器模式等。软件设计模式在软件的发展过程中起到了里程碑的作用,促进了软件质量,提高了软件可靠性。更为重要的是,它提高了软件的可读性,为软

件设计师们进行软件设计理念的交流提供了平台。同时它为软件设计师们开辟了一条通往其他领域优秀理念的大路,相信会有更多在其他行业广泛应用的理念会应用于软件设计领域,从而产生更多的软件设计模式。软件设计模式的出现是必然的,它反映了人类思维活动的规律,反映了各学科之间存在着必然的联系;软件设计活动同样是人类智慧的结晶,多种软件模式的产生正是其他学科领域的词汇移植的结果。但是模式毕竟只是模式,实用高效才是硬道理,具体实践中还要视实际情况灵活变通[7][8]

 

五、Web应用程序的开发一般过程

不管是用什么平台,什么技术,开发每个Web应用程序都有其共同的一些工作。技术、平台要根据客户要求、项目情况而定,关键是开发程序的整体思想、解决方案。笔者总结出如下通俗易懂的步骤。

步骤(1):分析

开发一个web应用的第一步是分析客户的需求。此时应该

定义出一个尽量周全的该应用应该提供的功能清单。开发者需要明白客户想要什么(和客户沟通时要确保你们对方都知道对方在说些什么)。从与客户的交流讨论中总结出需求和软件规格。

步骤(2):设计

一旦弄清楚了这个Web应用需要做哪些事情,就可以开始设计了。可以结合一些经典的设计模式,将其灵活运用。这个步骤通常会反反复复进行很多次,每一次都把设计细化一些。第一要做的是画出页面流程图。页面流程图通常是很抽象的黑白绘画,画出将要实现的web应用的样子(可以加一些色彩,但尽量保持简单)。当你对做出的草图满意后,你可以开始制作实体模型了。实体模型仍然是些图案,但有色彩和细节。最终的实体模型看起来应该像你将要实现的Web应用的一个截屏图。不要忘记及时与客户交流沟通,他会看看这些东西,并给予他的认可。

步骤(3):实现、选择一个框架

现在已经知道了要去开发什么东西,那就要把它做出来。这一部分的工作很多,大部分的时间都要花在这个上面。第一个要做的决定是如何着手,采用什么样的技术,什么框架。这里有很多选择的余地,开发人员需要选出一个适合自己的。下面是一些常用的Web技术列表:

   ·ASP.NET

   ·PHP

   ·JSP

   ·Ruby on Rails

   ·Struts

 

没有一个明确的标准说哪个框架最好。它们都各有不同,每个都有自己的长处。最重要的是要知道它们任何一个都能让你开发出好用的web应用。

步骤(4):开发

一 旦知道了如何去开发,那就要甩开臂膀开发了。开发工作可以看作有很多块,但说到底,这都是标准的编程活动了。在后台,要创建类,对象,服务,过程,以及持久层来把这些对象保存到数据库中。后台是整个应用的核心,对任何应用来说,它跟普通的编程没有什么区别。接着是前台的开发,你现在编写的代码才是真正给用户使用的操作界面。你把后台的程序和原型界面集成到一起,把系统各部分集成到一起。你还可以把你在开发过程中想到的一些很炫的小功能用JavaScript实现。

步骤(5):逐步完善

现在应用程序已经开发出来,各个独立的模块也集成到了一起。开发者需要通过测试来确保在步骤一中定义的需求和软件规格是否被实现。要确保用户不能通过试图做一些你还没有实现的操作而把你的应用弄坏(参考白盒和黑盒试)。同时还要确保你的程序能够在各种浏览器里都能正确的运行。可以做一些小的调整,改进应用程序给人的感觉,让它趋于完美。

步骤(6):发布和后续工作

这是最后一步即发布你的应用,让用户能够真正使用它(如果这个应用是个公众开发的应用,别忘了做新闻宣传)。使用者会帮助你改进程序的质量。不要忙着增加功能,要专注于把目前的程序变的稳固。听取用户反馈的意见,思考如何使应用变的更好。找出不和谐的地方,消除掉。以后每次的迭代都要经过上面所说的六个步骤。至此,一个Web应用程序开发完成。

步骤(7):小结

完成项目的交付后可以全面地总结此次开发的收获,有哪些地方做的好的要继续保持,哪些地方欠缺的以后改进。写成相应的文档,保存相应的代码,留着日后参考,免得每次做项目从零开始,减少重复劳动。

六、总结

    本文在参阅大量资料的基础上对Web应用程序开发进行了分析总结。从Web应用程序的发展讲起,介绍了计算机前辈们的软件设计思想、框架。随着当前软件项目复杂度的提升,怎样快速高效即“多、快、好、省”地开发Web应用程序成为人们关心的话题。笔者尝试将软件复用技术、设计模式、主流框架灵活运用于实际的Web项目开发,以构建高效的开发方法。

参考文献:

[1] 董跃华,马亚飞.软件复用在综合教务信息管理系统中的探索[J].江西理工大学学报,2011,32(3):26-29.

[2] 江龙强,汪海涛.基于构件的软件复用技术研究及在 MIS中的应用[J].微型机与应用,2011,30(17):16-18.

[3] 肖振南,陈纪铭.浅析软件复用技术的应用[J].电脑知识与技术,2011,7(21):5163-5164.

[4] 熊风光.基于构件的软件复用技术的研究[D].山西:中北大学,2005.

[5] 百度百科. http://baike.baidu.com/view/25603.htm

[6] 维基百科. http://zh.wikipedia.org/wiki/Spring

[7] 阎宏.JAVA与模式[M].北京:电子工业出版社,2002.

[8] 王越超,姚娱.探讨软件设计模式背后的科学方法与科学哲学[J]. 广州城市职业学院学报,2010,4(1):45-49.

[9] 徐长盛,戴超,谢立.一种快速开发Web应用程序方法的研究[J]. 计算机工程与设计,2004,6(7):25-29.

[10] 景晓玺,葛玮,郝克刚. 基于JMS的企业即时通讯系统的设计与实现[J]. 计算机应用与软件,2009,26(3):167-169.

[11] 徐晶,许炜.消息中间件综述[J].计算机工程,2005,31(16):73-76.

[12] 余童兰,张娟,何杰[J].电脑知识与技术,2010,6(25):7049-7051.

[13] 孙卫琴.Java网络编程精解[M].北京:电子工业出版社,2007.

[14] PaulJ.Deitel,Harvey M.Deitel.Java for programers[M]. 北京:电子工业出版社,2010.

[15]Eckel B.Thinking in Java[M].America:Person Education,2003.

[16]EnterpriseEngineering Software[EB/OL].http://www.intergraph.com/

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程猿薇茑

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值