作者:周文 厚朴教育来源:本站原创 点击数:5265 更新时间:2009-4-2 | ||||||||||||||||||||||||||||||||||||
摘要:介绍基于软件工程的面向对象思想,利用web service技术,开发具有三层体系结构的规划信息管理系统的过程,突出此系统具有的高可维护性、高重用性、高灵活性、高扩展性等特性,并对系统实现的关键技术进行深入研究,最后总结此种软件开发模式的利弊。 关键字:Web Service、面向对象、三层架构、规划信息管理系统、面向对象模型化技术 中图分类号: TP393 文献标识码:A
引言:随着时代的发展,软件开发在生产效率、可靠性、灵活性、可扩展性、易维护性、易管理等方面提出了更高要求,为了迎接日趋复杂的软件需求的挑战,新的软件工程思想和方法层出不穷,尤其是面向对象思想、分层式软件体系架构的出现,极大地改变了传统软件的开发模式,大大提高了软件的开发效率。 互联网迅猛发展,大量异构程序和不同平台之间的互操作性要求越来越强烈。Web Service应运而生,它使原来各孤立的站点之间的信息能够更加方便的相互通信和共享。 顺应时代技术潮流,集众家之所长,作者于是基于软件工程的面向对象思想,利用web service技术,开发具有三层体系结构的某市规划信息管理系统。
正文: 1. 面向对象简介 1.1面向对象思想、方法和技术 面向对象思想的出发点是尽可能模拟人类习惯的思维方式,使开发软件的方法与过程尽可能接近人类认识世界、解决问题的方法与过程。 面向对象开发方法主要有三个,分别是Booch方法、Cord方法和OMT方法。本系统采用OMT方法进行开发。此方法将面向对象的概念应用于软件生存周期的各个阶段,并说明了如何在软件开发的整个生存周期中贯穿运用面向对象的概念、方法和技术进行分析、设计和实现。 面向对象技术包括面向对象分析、面向对象设计及面向对象程序设计三部分内容: (1) 面向对象分析:指软件需求分析的一种带有约束性的方法,用于软件开发过程中的问题定义阶段。其主要活动是对问题进行抽象建模(包括使用实例建模、类和对象建模、组件建模和分布建模等),产生一种描述系统功能和问题论域基本特征的综合文档。 (2) 面向对象设计:将面向对象分析所创建的分析模型转变为作为软件构造蓝图的设计模型。面向对象设计的独特性,在于其具有基于抽象、信息隐蔽、功能独立性和模块性建造系统等四个重要软件设计概念的能力。 (3) 面向对象程序设计:指使用类和对象以及面向对象特有的概念进行编程。 概括的说,面向对象是一种运用对象、类、继承、封装、聚合、消息传递、多态性等概念来构造系统的软件开发方法。它打破了传统的代码、数据分离做法,将一种数据结构和操作该数据结构的方法捆绑在一起,封装在一个对象内,实现了数据封装和信息隐藏,通过对象的对外接口实现信息传递,使数据封装、信息隐藏、抽象代码共享等软件工程思想得到充分体现。 1.2面向对象的优缺点 在计算机系统开发领域中存在各种各样的系统分析和设计方法, 其中结构化方法与面向对象方法是软件开发程序设计中的2个主流思想。 结构化方法程序设计的基本思想是: 自顶向下,采用模块化技术, 分而治之, 逐步求精地将信息系统按功能分解为若干模块进行分析与设计,应用子程序实现模块化, 模块内部由顺序结构、选择结构、循环结构等三大基本控制结构组成。 结构化方法的局限: 1)不能直接反映问题域:结构化分析方法以数据流为中心, 强调数据的流动及每一个处理过程,不是以问题域中的各事物为基础, 打破了各事物的界限, 分析结果不能直接反映问题域, 容易隐蔽一些对问题域的理解偏差。 2)数据和代码缺乏保护机制:一个特定全程数据既可以被操作这些数据的过程访问, 也可以被其他过程访问,这给程序设计带来了不安定因素, 一个不正常的数据修改或者过程调用可能会破坏正常的程序执行流程或结果。 3)分析和设计体系不一:结构化分析的结果是数据流图, 结构化设计的结果是模块结构图。二者的表示体系不一致,分析文档很难与设计文档对应, 所以从分析到设计的“转换”过程容易因理解上的错误而使得设计文档与用户的原本需求相差甚远。 4)开发过程复杂:由于结构化方法将过程和数据分离为相互独立的实体, 程序员在编程时必须时刻考虑到所要处理的数据的格式。对于不同的数据格式做相同的处理或对于相同的数据格式做不同的处理都需要编写不同的程序,而且往往不能对数据的安全性进行有效的控制。如果程序进行扩充或升级, 也需要大量修改函数,因此结构化程序的可重用性不好。 面向对象方法与传统的结构化方法比较,有如下独到之处: (1) 可重用性。通过类的继承关系,使公共的特性能够共享, 简化了对象、类的创建工作量, 增加了代码的可重性。另外, 重用经过测试的代码还可以使产生额外错误的可能性达到最小,增强了系统的可靠性。 (2) 可扩展性。类的继承性使类能够反映现实世界的层次结构,多态性反映了现实世界的复杂多样。类的继承性和多态性使软件编码具有良好的可重用性和可扩展性。无需修改源代码就可以使软件功能容易扩充和修改。 (3) 数据保护。将一种数据结构和操作该数据结构的方法捆绑在一起,封装在一个对象内,实现了数据封装和信息隐藏,通过对象的对外接口实现信息传递。封装防止了程序相互依赖性而带来的变动影响。 (4) 可管理性。面向对象的开发方法采用类作为构建系统的部件,以对象作为系统的基本组成单元, 使整个项目的组织更加合理、方便。归纳事物、划分成类进行管理,符合人们认识和管理客观世界的习惯思维方式。 当然,面向对象也存在一些缺点:由于面向更高的逻辑抽象层,不得不做出性能上面的牺牲,导致代码执行效率较低。 因此,在对性能要求不是很高的情况下,应用面向对象方法进行系统开发,是一种极好的选择。 2. web service技术简介 2.1 web service的定义 web Service 技术是一种面向服务架构的技术,通过标准的Web协议提供服务,目的是保证运行在不同平台上的应用服务可以互操作。 是一个用来发布和搜索WEB服务的协议,应用程序可通过此协议在设计或运行时找到目标WEB服务。SOAP (Simple Object Access Protocal,简单对象访问协议)是一个基于XML的可扩展消息信封格式,需同时绑定一个传输用协议。这个协议通常是HTTP或 HTTPS,但也可能是SMTP 或XMPP。WSDL是一个XML格式文档,用以描述服务端口访问方式和使用协议的细节,通常用来辅助生成服务器和客户端代码及配置信息。 web Service 技术是构建松散耦合的、可复用的软件模块,自包含的、自描述的、模块化的应用程序的利刃。开发出的应用程序可以通过Web来发布、定位和调用。Web Service代表新一代的软件架构模式, 即通过互联网架构应用软件, 充分体现服务即软件(Software as a Service)等软件工程思想。 2.2 web service 技术的优缺点 Web service技术的优点: (1) 跨平台的可互操作性。Web Service完全基于XML、XSD(XML Schema)等独立于平台、独立于软件供应商的标准,是创建可互操作的、分布式应用程序的新平台。 (2) 跨防火墙的通信。由于Web Service使用了SOAP协议,数据是以ASCII文本的方式而非二进制传输,可以无障碍地通过防火墙。 (3) 应用程序集成、软件和数据重用。通过Web Service,应用程序可以用标准的方法把功能和数据“暴露”出来,供其它不同语言写成的、在不同平台上运行的各种程序使用。 (4) 实现难度小。Web Service技术的实现难度要比CORBA和DCOM小得多。 Web service技术的缺点: (1) Web Service使用XML对数据封装,会造成大量的数据在网络中传输。 3. 三层体系结构的介绍 3.1三层体系结构的定义 在软件体系架构设计中,分层式结构是最常见,也是最重要的一种结构。微软推荐的分层式结构一般分为三层,从下至上分别为:数据访问层、业务逻辑层、表示层,如图所示: 图一:三层的分层式结构 数据访问层:其功能主要是负责访问数据库,即实现对数据表的Select、Insert、Update、Delete的操作。如果使用对象关系映射(Object Relational Mapping,ORM)技术,那么就会包括对象和数据表之间的mapping,以及对象实体的持久化。 业务逻辑层:是整个系统的核心,它与这个系统的业务(领域)有关。以规划信息系统为例,业务逻辑层的相关设计,均和规划信息系统特有的逻辑紧密相关,例如查询规划图的信息,下载规划图,添加规划图等等。如果涉及到对数据库的访问,则调用数据访问层。 表示层:是系统的UI部分,负责使用者与整个系统的交互。在这一层中,理想的状态是不应包括系统的业务逻辑,即表示层中的逻辑代码,仅与界面元素有关。 3.2三层体系结构的优缺点 分层式结构究竟其优势何在?Martin Fowler在《Patterns of Enterprise Application Architecture》一书中给出了答案: (1) 开发人员可以只关注整个结构中的其中某一层; (2) 可以很容易的用新的实现来替换原有层次的实现; (3) 可以降低层与层之间的依赖; (4) 有利于标准化; (5) 利于各层逻辑的复用。 概括来说,分层式设计可以达至如下目的:分散关注、松散耦合、逻辑复用、标准定义。 此三层体系结构,可以使开发人员的分工更加明确。一旦定义好各层次之间的接口,负责不同逻辑设计的开发人员就可以分散关注,齐头并进。即UI人员只需考虑用户界面的体验与操作,领域的设计人员仅关注业务逻辑的设计,数据库设计人员也只需关注数据访问层的设计。开发效率可想而知,非常之高。 松散耦合的好处也是显而易见的。如果一个系统没有分层,那么各自的逻辑都紧紧纠缠在一起,彼此间相互依赖,谁都是不可替换的。一旦发生改变,则牵一发而动全身,对项目的影响极为严重。降低层与层间的依赖性,既可以保证系统未来良好的可扩展,又可以保证代码的高复用性。每个功能模块一旦定义好统一的接口,就可以被各个模块所调用,而不用为相同的功能进行重复地开发。接口的标准化也保证了层与层之间的良好通信。 “金无足赤,人无完人”,分层式结构也不可避免具有一些缺陷: 1) 降低了系统的性能。如果不采用分层式结构,很多业务可以直接访问数据库,直接获取相应的数据,不必通过中间层来完成。 2) 有时会导致级联的修改。这种修改尤其体现在自上而下的方向。如果在表示层中需要增加一个功能,为保证其设计符合分层式结构,可能需要在相应的业务逻辑层和数据访问层中都增加相应的代码。 4. 规划信息管理系统的功能设计及体系结构设计 4.1系统功能设计 图二:系统功能结构图 由图二可知,规划信息管理系统由三大模块组成,即修规图管理模块、地形图管理模块、用户管理模块。 使用面向对象模型化技术(Object Modeling Technique,简写为OMT)对此系统进行开发。OMT以面向对象思想为基础,通过构造一组相关模型(对象模型、动态模型和功能模型)来获得关于此系统的全面认识。 下面以规划信息管理系统中的修规图模块的开发为例进行说明。(为了方便阐述,已经大大简化了真实系统模型) 4.1.1对象模型 对象模型描述系统中对象的静态结构、对象之间的关系、对象的属性、对象的操作。对象模型一般包括对象模型图和数据字典。 通过对修规图模块的功能和业务流进行分析,可以得到以下模型: 图三:修规图对象类图 如图三所示,XiuGuiMapInfo类表示的是修规图对象。其中属性FID是每一张修规图的唯一标识符,属性FileNO表示修规图的图文号,属性RightNo表示的是修规图的许可证号,属性Url记录的是修规图CAD文件在服务器上面的存放路径。 根据实体类可以获得相应的数据表XiuGuiMapInfor(图四),用于存放每张修规图的描述信息,其中FID为主键: 图四:数据表XiuGuiMapInfor 4.1.2动态模型 动态模型描述与时间和操作顺序有关的系统特征,包括激发事件、事件序列、确定事件先后关系以及事件和状态的组织。此处知识点较多,有兴趣的读者可以作进一步的研究。 4.1.3功能模型 功能模型描述与值的变换有关的系统特征,包括功能、映射、约束和函数依赖。功能模型一般用数据流图来表示。 以“添加修规图”功能模型为例,进行说明,如图五所示。
图五:“添加修规图”功能模型 4.2系统运行原理 图六:规划信息管理系统运行原理 系统运行原理:如图六所示,在客户端(Client)声明一个代理类(Proxy Class),客户端通过此代理类与Web Server服务器进行Request和Response .当CAD文件或者是CAD文件的描述信息也或是相关操作命令,被封装成SOAP格式的数据流发送到服务器端的时候,服务器端生成一个进程对象,接收这个Request的SOAP包进行解析处理,然后把解析的结果传给web service进行处理,web service在处理的过程中会根据需要,与Oracle/MSSQL DB、File Store Directory联系。处理结束以后,把处理结果进行SOAP包装,作为一个Response发送给客户端的代理类,然后此代理类对这个SOAP包进行解析处理。 注:修规图和地形图的文件格式为CAD。Oracle/MSSQL DB是存储CAD文件描述信息的,File Store Directory是用来存放CAD文件的。 4.3规划信息管理系统体系结构设计 图七:规划信息管理系统三层体系结构图 如图七所示,在数据访问层(DAL)中,采用Interface抽象出数据访问逻辑,并以DAL Factory作为数据访问层的对象的工厂模式。对于Interface而言,分别有支持MSSQL的SQL Server DAL和支持Oracle 10g的Oracle DAL具体实现。而对象模型(Model Object)则包含了数据实体对象(例如修规图对象XiuGuiMapInfo)。 数据访问层的模块结构如图八所示: 图八中可以看到,在数据访问层中,完全采用了“面向接口编程”思想。抽象出来的IDAL模块,脱离了与具体数据库的依赖,从而使得整个数据访问层能够很好地支持数据库的迁移。DALFactory模块专门管理DAL对象的创建,便于业务逻辑层访问。SQLServerDAL和OracleDAL模块均实现IDAL模块的接口,其中包含的逻辑就是对数据库的Select,Insert,Update和Delete操作。因为数据库类型的不同,对数据库的操作也有所不同,代码也会因此有所区别。 此外,抽象出来的IDAL模块,除了解除了向下的依赖之外,对于其上的业务逻辑层,同样仅存在弱依赖关系,如图九所示: 图九中,BLL是业务逻辑层的核心模块,它包含了整个系统的核心业务。在业务逻辑层中,不能直接访问数据库,而必须通过数据访问层。注意图中对数据访问业务的调用,是通过接口模块IDAL来完成的。既然与具体的数据访问逻辑无关,则层与层之间的关系就是松散耦合的。如果此时需要修改数据访问层的具体实现,只要不涉及到IDAL的接口定义,那么业务逻辑层就不会受到任何影响。 图十:表示层的模块结构图 由于此系统业务逻辑相对简单,所以将核心的业务逻辑都放到了一个模块BLL中,并没有将具体的实现和抽象严格的按照模块分开。所以web service表示层和业务逻辑层之间的调用关系,其耦合度相对较高。 5. 规划信息管理系统的具体实现 此系统在visual studio2005平台上,采用C#,SQL2005/Oracle10g进行开发。
图十一:系统在visual studio2005中的解决方案 从下表(表一)可以知道图十一中规划信息管理系统在开发平台上面的所有项目的基本描述,即各项目在系统的三层体系结构中扮演的角色。
表一:开发平台中系统各项目在系统的三层体系结构中扮演的角色 5.1系统服务器端的实现 5.1.1涉及的项目名称及描述:(实现步骤为:4-3-7-6-5-2-1) (1) Web Service/ WebSite/ Client=表示层 (2) BLL=业务逻辑层 (3) IDAL=数据访问层接口定义 (4) Model=业务实体 (5) DALFactory=数据层的抽象工厂(创建反射) (6) SQLServerDAL=SQLServer数据访问层 / OracleDAL=Oracle数据访问层 (7) DBUtility 数据库访问组件基础类 CheckUtility 常用验证、加密函数基础类 5.1.2项目引用关系(依赖关系) (1)Web Service引用 BLL。 (2)BLL 引用 IDAL,Model,使用DALFactory创建实例。 (3)IDAL 引用 Model。 (4)Model 无引用。 (5)DALFactory 引用IDAL,通过读取web.config里设置的程序集,加载类的实例,返回给BLL使用。 (6)SQLServerDAL 引用 Model、IDAL、CheckUtility和DBUtility,被DALFactory加载的程序集,实现接口里的方法。 5.1.3实现步骤(以修规图管理模块开发为例) (1) 创建Model项目:实现业务实体。 如图三所示,类XiuGuiMapInfo表示的是修规图对象。 (2)创建IDAL项目:实现接口。 图十二:IDAL中IXiuGuiMap接口类图 如图十二所示,IXiuGuiMap接口所包含的方法和方法的基本描述如下: //添加一张修规图的信息 bool AddXiuGuiMap(XiuGuiMapInfo map); //删除某特定修规图的信息 bool deleteXiuGuiMap(int FID); //查询功能 获得符合搜索条件的所有修规图的信息 IList<XiuGuiMapInfo>GetSearchXiuGuiMap(string SearchWord); //查询功能获得数据库中所有修规图的信息 IList<XiuGuiMapInfo> GetAllXiuGuiMap(); //查询功能 获得某特定修规图的信息 XiuGuiMapInfo GetXiuGuiMap(int FID); //下载某特定修规图的CAD文件 byte[] GetXiuGuiMapCAD(int FID); //更新某特定修规图的信息 bool UpdateXiuGuiMap(XiuGuiMapInfo map); (3)创建SQLServerDAL/OracleDAL项目:实现接口里的方法(需要调用DBUtility和CheckUtility组件类),如图十三所示。 图十三:SQLServerDAL中的XiuGuiMap类图 (4)增加web.config里的配置信息:可设为SQLServerDAL的程序集,代码如下: <appSettings> <addkey="WebDAL"value="SQLServerDAL"/> </appSettings> (5)创建DALFactory项目:返回程序集中指定类的实例。示例中的指定类为SQLServerDAL.XiuGuiMap。 示例:读取web.config里的配置信息,创建DALFactory的方法CreateXiuGuiMap(),返回程序集中类SQLServerDAL.XiuGuiMap的实例。 主要代码: privatestatic readonly string path = ConfigurationManager.AppSettings["WebDAL"]; publicstatic IDAL.IXiuGuiMap CreateXiuGuiMap() { string className = path +".XiuGuiMap"; return (DAL.IXiuGuiMap)Assembly.Load(path).CreateInstance(className); } (6)创建BLL项目:调用DALFactory,得到程序集指定类的实例,调用此类的数据操作方法。 示例:调用DALFactory,得到程序集中类SQLServerDAL.XiuGuiMap的实例,调用此类数据操作方法GetXiuGuiMapInforByFID(int FID)。此类所含的数据操作方法如图十四所示。 主要代码: privatestatic readonly IUser dal = webserviceDemo.DALFactory.DataAccess.CreateUser(); publicIList<XiuGuiMapInfo> GetXiuGuiMapInforByFID(int FID) { if (FID>int.MaxValue&&FID<int.MinValue) return newList<XiuGuiMapInfo>(); return dal.GetXiuGuiMap(FID); } 图十四:SQLServerDAL.XiuGuiMap类图 (7)创建Web Service项目:根据实际业务需要,调用BLL里的数据操作方法创建服务。 图十五:web service对外发布的服务 如图十五所示,web service对外发布的服务和服务内容的描述如下: 1) AddXiuGuiMap 添加一张修规图的信息 2) GetAllXiuGuiMap 获得数据库中所有修规图的信息 3) GetSearchXiuGuiMap获得符合搜索条件的所有修规图的信息 4) GetXiuGuiMapCAD 下载某特定修规图的CAD文件 5) GetXiuGuiMapInforByFID获得某特定修规图的信息 6) Link 验证服务地址是否正确 <7) Login 登录授权 8) UpdateXiuGuiMap 更新某特定修规图的信息 9) deleteXiuGuiMap 删除某特定修规图的信息 5.2系统客户端的实现 以Windows Client为例,我们需先给客户端工程添加Web引用.添加后,客户端会生成一系列的文件,如图十六所示。 图十六:Web Service在客户端生成的文件 完成添加后,即可通过实例化代理类来调用Web Services。 示例:实例化图十六中的WebService_XiuGuiMap.Service代理类,调用服务器端的服务内容 主要代码: Client.WebService_XiuGuiMap.Service ws =new Client.WebService_XiuGuiMap.Service(); Object obj=ws.GetXiuGuiMapInforByFID(1);//调用服务内容,返回了一个object对象。 6. 关键技术的研究 6.1. 自定义类的设计和实例化 ASP.NET WebService支持绝大多数的基元类型及其数组,另外还支持自定义的结构(Struct)、类型(Class)、枚举(Enum)、DataSet、XmlElement、XmlNode、集合(IEnumerable/ICollection)等。 ASP.NET WebService使用 XmlSerializer 进行序列化操作,对于自定义类型要注意以下几点: (1) 只能序列化可读写公共属性和字段。只读属性(get;)、只读字段(readonly)、常量(const)以及所有的非 public数据成员都不会被序列化。 (2) 自定义类型必须具有不接受任何参数的默认构造函数。 (3) 不能序列化方法。客户端生成的代理对象不包含任何自定义类型的方法(不是WebMethod)。 基于以上几点,因此我们最好只定义纯粹用来传输复合数据的数据类型(Data Object)。 在表现层中,除了web service外,都只能使用默认构造函数实例化自定义类。通过对象的属性为对象赋值。 6.2. 三层体系结构设计中各层设计以及工厂模式的使用 三层体系结构设计中各层设计的精妙之处在上文已经讲述清楚。 在软件系统中,经常面临着“一系列相互依赖的对象”的创建工作;同时由于需求的变化,往往存在着更多系列对象的创建工作。为了应对这种变化,我们绕过常规的对象的创建方法(new),使用了一种“封装机制”来避免客户程序和这种“多系列具体对象创建工作”的紧耦合,即抽象工厂模式,就是提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。 概括来说,两者的目的都是为了分散关注、松散耦合、逻辑复用、标准定义,给系统带来更大的可扩展性和尽量少的代码修改量。 6.3. 数据传输的优化 SOAP是基于XML编码的,系统使用 XMLSerializer类对SOAP进行了序列化处理,压缩率高达80%,提高了网络传输的效率.优化了 WEBSERVICE性能。而客户端只需将接收到的数据流进行反序列化,就可以得到源数据。 6.4. 状态保持 NET WebService是建立在 ASP.NET 基础上,在 WebService中我们同样可以访问 Session、User、Application等上下文对象,不过在某些使用细节上可能有所不同。由于 WebService 客户端代理对象可能应用于 ConsoleApplication、WinForm或 WebForm 等环境,而 Session 又必须通过 Cookie 来保存唯一的 SessionID,因此我们必须使用 CookieContainer创建 Cookie 容器来保存 WebService 返回的 Session 信息。 创建容器对象后,必须将其引用赋值给代理对象的 CookieContainer属性。在第一次调用 SessionEnabled WebMethod 后,该容器将持有 Session Cookie信息。如果需要在多个代理对象中调用 SessionEnabled WebMethod,那么它们必须持有同一个 Cookie容器对象。 简言之,服务器端用session进行状态保持,客户端需要cookie的支持。状态保持,可以用于实现一次身份认证授权,多次调用服务的功能,而不用每次调用服务时都要从客户端传递身份信息到服务器端进行认证。 6.5. 客户端自定义web service地址 客户端通过读取和设置自身的配置文件(.config)实现自定义web service地址。 6.6. 安全性的提高 用户的登录密码调用CheckUtility组件类中的MD5算法加密函数进行加密,而后进行网络传输,到达服务器端进行身份认证和授权,保证了用户密码的安全性。 使用 XMLSerializer类对网络传输的数据进行压缩,一定程度上保证数据传输的安全性。如果还想继续提高安全级别,可以调用.net类库中提供的其他方法或者自定加密方法来加密数据流。有兴趣的读者可以进一步研究。 6.7. 客户端在线升级 系统软件升级时,每一台客户机需要重新安装,其维护和升级成本非常高。解决之道是,开发客户端升级模块。客户端通过web service在远程服务器上验证软件版本,随时下载最新的升级文件,实现客户端自动升级。 6.8. 大文件传输 服务器端web.config配置文件中的maxRequestLength 参数的默认值为 4096 (4 MB),限制着每个请求的大小不得超过4096KB。所以,默认情况下不能上传大于这个值的文件。修改maxRequestLength参数,可以实现文件上传大小限制的自定义。 ASP.NET 2.0启用硬盘临时文件的阈值(threshold)是可配置的,阈值控制参数为requestLengthDiskThreshold,其默认值为256KB,即一个请求内容超过256KB时就会启用硬盘作为缓存。避免服务器的内存会因为客户端的大文件传输而耗尽。 7. 此种软件开发模式的利弊 此种软件开发模式适用于绝大多数软件系统的开发,具有开发效率高的特性。此模式开发出来的系统具有高可维护性、高重用性、高灵活性、高扩展性、高可靠性和易集成性等特点,主要缺点在于运行性能不是特别高。这也是面向对象技术的固有缺点,无法避免。客观的讲,此种软件开发模式是一种优秀的开发模式,是时代进步、科技发展的结晶。
参考文献: 1. 程序设计中结构化方法和面向对象方法的比较符于江 电脑知识与技术 2008.04.07 2. Web Service 技术在移动通信商务手机终端的应用 连晋平,刘平 国外电子元器件 2008年第7期 3. Microsoft .NET Pet Shop 4: Migrating an ASP.NET 1.1 Application to 2.0 Gregory Leake, Alan Le, Alex Arkhipov, Mike Hanley, and Steve Nyholm MSDN February 2006 4. 地理信息系统软件工程的原理和方法 毕硕本等 北京:科学出版社,2003 5. * http://zh.wikipedia.org 6. 《解剖PetShop》系列 佚名 互联网 7. MSDN 技术资源库http://msdn.microsoft.com/zh-cn/library/default.aspx
|
||||||||||||||||||||||||||||||||||||
厚朴教育录入:周文 责任编辑:07hope |