Struts,Sping和Spirng MVC等框架分析




Spring 及其优势
大部分项目都少不了spring的身影,为何你们对他如此青睐,并且对他的追捧丝毫没有减退之势呢html

Spring是什么:java

Spring是一个轻量级的DI和AOP容器框架。git

说它轻量级有一大部分缘由是相对与EJB的(虽然本人从没有接触过EJB的应用),重要的是,Spring是非侵入式的,基于spring开发的应用通常不依赖于spring的类。程序员

DI:称做依赖注入(Dependency Injection),和控制反转一个概念,具体的讲,当一个角色须要另一个角色协助的时候,在传统的程序设计中,一般有调用者来建立被调用者的实例。可是在spring中建立被调用者将再也不有调用者完成,所以叫控制反转。建立被调用对象有Spring来完成,在容器实例化对象的时候主动的将被调用者(或者说它的依赖对象)注入给调用对象,所以又叫依赖注入。ajax

AOP:Spring对面向切面编程提供了强有力的支持,经过它让咱们将业务逻辑从应用服务(如事务管理)中分离出来,实现了高内聚开发,应用对象只关注业务逻辑,再也不负责其它系统问题(如日志、事务等)。Spring支持用户自定义切面。
面向切面编程是面向对象编程的有力补充。面向对象编程将程序分红各个层次的对象,面向切面的程序将运行过程分解成各个切面。AOP是从运行程序的角度去考虑程序的结构,提取业务处理过程的切面,OOP是静态的抽象,AOP是动态的抽象,是对应用执行过程的步骤进行抽象,从而得到步骤之间的逻辑划分。spring

容器:Spring是个容器,由于它包含而且管理应用对象的生命周期和配置。如对象的建立、销毁、回调等。sql

框架:Spring做为一个框架,提供了一些基础功能,(如事务管理,持久层集成等),使开发人员更专一于开发应用逻辑。数据库

看完了Spring是什么,再来看看Spring有哪些优势apache

1.使用Spring的IOC容器,将对象之间的依赖关系交给Spring,下降组件之间的耦合性,让咱们更专一于应用逻辑编程

2.能够提供众多服务,事务管理,WS等。

3.AOP的很好支持,方便面向切面编程。

4.对主流的框架提供了很好的集成支持,如hibernate,Struts2,JPA等

5.Spring DI机制下降了业务对象替换的复杂性。

6.Spring属于低侵入,代码污染极低。

7.Spring的高度可开放性,并不强制依赖于Spring,开发者能够自由选择Spring部分或所有

Struts2的优势
Struts2 是一个至关强大的Java Web开源框架,是一个基于POJO的Action的MVC Web框架。它基于当年的Webwork和XWork框架,继承其优势,同时作了至关的改进。Struts2如今在Java Web开发界的地位能够说是大红大紫,从开发人员的角度来分析,Struts2之因此可以如此的深刻开发人员之心,与其优良的设计是分不开的。

一、Struts2基于MVC架构,框架结构清晰,开发流程一目了然,开发人员能够很好的掌控开发的过程。

我在项目开发过程当中,一个具体的功能的开发流程是:拿到一个具体的功能需求文档和设计好的前台界面(在开发中我不负责设计页面),分析须要从前台传递哪些参数,肯定参数的变量名称,在Action中设置相应的变量,这些参数在前台如何显示,并将页面上的一些控件适当使用Struts2提供的服务器端控件来代替,编写Action对应的方法来完成业务逻辑,最后,作一些与配置文件相关的设置。固然实际的开发比这个过程要复杂,涉及到数据库,验证,异常等处理。可是使用Struts2进行开发,你的关注点绝大部分是在如何实现业务逻辑上,开发过程十分清晰明了。

二、使用OGNL进行参数传递。
OGNL提供了在Struts2里访问各类做用域中的数据的简单方式,你能够方便的获取Request,Attribute,Application,Session,Parameters中的数据。大大简化了开发人员在获取这些数据时的代码量。

三、强大的拦截器
Struts2 的拦截器是一个Action级别的AOP,Struts2中的许多特性都是经过拦截器来实现的,例如异常处理,文件上传,验证等。拦截器是可配置与重用的,能够将一些通用的功能如:登陆验证,权限验证等置于拦截器中以完成一些Java Web项目中比较通用的功能。在我实现的的一Web项目中,就是使用Struts2的拦截器来完成了系统中的权限验证功能。

四、易于测试
Struts2的Action都是简单的POJO,这样能够方便的对Struts2的Action编写测试用例,大大方便了Java Web项目的测试。

五、易于扩展的插件机制
在Struts2添加扩展是一件愉快而轻松的事情,只须要将所须要的Jar包放到WEB-INF/lib文件夹中,在struts.xml中做一些简单的设置就能够实现扩展。经常使用的Struts2的扩展能够经过这个连接找到:
http://cwiki.apache.org/S2PLUGINS/home.html

六、模块化
Struts2已经把模块化做为了体系架构中的基本思想,能够经过三种方法来将应用程序模块化:
将配置信息拆分红多个文件
把自包含的应用模块建立为插件
建立新的框架特性,即将与特定应用无关的新功能组织成插件,以添加到多个应用中去。

七、全局结果与声明式异常
为应用程序添加全局的Result,和在配置文件中对异常进行处理,这样当处理过程当中出现指定异常时,能够跳转到特定页面,这一功能十分实用。

Spring MVC和Struts2的比较的优势
咱们用struts2时采用的传统的配置文件的方式,并无使用传说中的0配置。spring3 mvc能够认为已经100%零配置了(除了配置spring mvc-servlet.xml外)。

Spring MVC和Struts2的区别:

机制:spring mvc的入口是servlet,而struts2是filter(这里要指出,filter和servlet是不一样的。之前认为filter是 servlet的一种特殊),这样就致使了两者的机制不一样,这里就牵涉到servlet和filter的区别了。

性能:spring会稍微比struts快。spring mvc是基于方法的设计,而sturts是基于类,每次发一次请求都会实例一个action,每一个action都会被注入属性,而spring基于方法,粒度更细,但要当心把握像在servlet控制数据同样。spring3 mvc是方法级别的拦截,拦截到方法后根据参数上的注解,把request数据注入进去,在spring3 mvc中,一个方法对应一个request上下文。而struts2框架是类级别的拦截,每次来了请求就建立一个Action,而后调用setter getter方法把request中的数据注入;struts2其实是经过setter getter方法与request打交道的;struts2中,一个Action对象对应一个request上下文。

参数传递:struts是在接受参数的时候,能够用属性来接受参数,这就说明参数是让多个方法共享的。

设计思想上:struts更加符合oop的编程思想, spring就比较谨慎,在servlet上扩展。

intercepter的实现机制:struts有以本身的interceptor机制,spring mvc用的是独立的AOP方式。这样致使struts的配置文件量仍是比spring mvc大,虽然struts的配置能继承,因此我以为论使用上来说,spring mvc使用更加简洁,开发效率Spring MVC确实比struts2高。spring mvc是方法级别的拦截,一个方法对应一个request上下文,而方法同时又跟一个url对应,因此说从架构自己上spring3 mvc就容易实现restful url。struts2是类级别的拦截,一个类对应一个request上下文;实现restful url要费劲,由于struts2 action的一个方法能够对应一个url;而其类属性却被全部方法共享,这也就没法用注解或其余方式标识其所属方法了。spring3 mvc的方法之间基本上独立的,独享request response数据,请求数据经过参数获取,处理结果经过ModelMap交回给框架方法之间不共享变量,而struts2搞的就比较乱,虽然方法之间也是独立的,但其全部Action变量是共享的,这不会影响程序运行,却给咱们编码,读程序时带来麻烦。

另外,spring3 mvc的验证也是一个亮点,支持JSR303,处理ajax的请求更是方便,只需一个注解@ResponseBody ,而后直接返回响应文本便可。送上一段代码:

[java] view plain copy
在CODE上查看代码片派生到个人代码片

 
 
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
@RequestMapping(value=“/whitelists”) public String index(ModelMap map) { Account account = accountManager.getByDigitId(SecurityContextHolder.get().getDigitId()); List groupList = groupManager.findAllGroup(account.getId()); map.put(“account”, account); map.put(“groupList”, groupList); return “/group/group-index”; } // @ResponseBody ajax响应,处理Ajax请求也很方便 @RequestMapping(value=“/whitelist/{whiteListId}/del”) @ResponseBody public String delete(@PathVariable Integer whiteListId) { whiteListManager.deleteWhiteList(whiteListId); return “success”; }

struts1与struts2本质区别 1 在Action实现类方面的对比:Struts 1要求Action类继续一个抽象基类;Struts 1的一个具体问题是使用抽象类编程而不是接口。Struts 2 Action类能够实现一个Action接口,也能够实现其余接口,使可选和定制的服务成为可能。Struts 2提供一个ActionSupport基类去实现经常使用的接口。即便Action接口不是必须实现的,只有一个包含execute方法的POJO类均可以用 做Struts 2的Action。 2 线程模式方面的对比:Struts 1 Action是单例模式而且必须是线程安全的,由于仅有Action的一个实例来处理全部的请求。单例策略限制了Struts 1 Action能作的事,而且要在开发时非凡当心。Action资源必须是线程安全的或同步的;Struts 2 Action对象为每个请求产生一个实例,所以没有线程安全问题。 3 Servlet依靠方面的对比:Struts 1 Action依靠于Servlet API,由于Struts 1 Action的execute方法中有HttpServletRequest和HttpServletResponse方法。Struts 2 Action再也不依靠于Serzvlet API,从而答应Action脱离Web容器运行,从而下降了测试Action的难度。 固然,假如Action须要直接访问HttpServletRequest和HttpServletResponse参数,Struts 2 Action仍然能够访问它们。可是,大部分时候,Action都无需直接访问HttpServetRequest和 HttpServletResponse,从而给开发者更多灵活的选择。 4 可测性方面的对比:测试Struts 1 Action的一个主要问题是execute方法依靠于Servlet API,这使得Action的测试要依靠于Web容器。为了脱离Web容器测试Struts 1的Action,必须借助于第三方扩展:Struts TestCase,该扩展下包含了系列的Mock对象(模拟了HttpServetRequest和HttpServletResponse对象),从而 能够脱离Web容器测试Struts 1的Action类。Struts 2 Action能够经过初始化、设置属性、调用方法来测试。 5 封装请求参数的对比:Struts 1使用ActionForm对象封装用户的请求参数,全部的ActionForm必须继续一个基类:ActionForm。普通的JavaBean不能用 做ActionForm,所以,开发者必须建立大量的ActionForm类封装用户请求参数。虽然Struts 1提供了动态ActionForm来简化ActionForm的开发,但依然须要在配置文件中定义ActionForm;Struts 2直接使用Action属性来封装用户请求属性,避免了开发者须要大量开发ActionForm类的烦琐,实际上,这些属性还能够是包含子属性的Rich 对象类型。假如开发者依然怀念Struts 1 ActionForm的模式,Struts 2提供了ModelDriven模式,可让开发者使用单独的Model对象来封装用户请求参数,但该Model对象无需继续任何Struts 2基类,是一个POJO,从而下降了代码污染。 6 表达式语言方面的对比:Struts 1整合了JSTL,所以可使用JSTL表达式语言。这种表达式语言有基本对象图遍历,但在对集合和索引属性的支持上则功能不强;Struts 2可使用JSTL,但它整合了一种更强大和灵活的表达式语言:OGNL(Object Graph Notation Language),所以,Struts 2下的表达式语言功能更增强大。 7 绑定值到视图的对比:Struts 1使用标准JSP机制把对象绑定到视图页面;Struts 2使用“ValueStack”技术,使标签库可以访问值,而不须要把对象和视图页面绑定在一块儿。 8 类型转换的对比:Struts 1 ActionForm 属性一般都是String类型。Struts 1使用Commons-Beanutils进行类型转换,每一个类一个转换器,转换器是不可配置的;Struts 2使用OGNL进行类型转换,支持基本数据类型和经常使用对象之间的转换。 9 数据校验的对比:Struts 1支持在ActionForm重写validate方法中手动校验,或者经过整合Commons alidator框架来完成数据校验。Struts 2支持经过重写validate方法进行校验,也支持整合XWork校验框架进行校验。 10 Action执行控制的对比:Struts 1支持每个模块对应一个请求处理(即生命周期的概念),可是模块中的全部Action必须共享相同的生命周期。Struts 2支持经过拦截器堆栈(Interceptor Stacks)为每个Action建立不一样的生命周期。开发者能够根据须要建立相应堆栈,从而和不一样的Action一块儿使用。 Hibernate优势 (1) 对象/关系数据库映射(ORM) 它使用时只须要操纵对象,使开发更对象化,抛弃了数据库中心的思想,彻底的面向对象思想 (2) 透明持久化(persistent) 带有持久化状态的、具备业务功能的单线程对象,此对象生存期很短。这些对象多是普通的JavaBeans/POJO,这个对象没有实现第三方框架 或者接口,惟一特殊的是他们正与(仅仅一个)Session相关联。一旦这个Session被关闭,这些对象就会脱离持久化状态,这样就可被应用程序的任 何层自由使用。(例如,用做跟表示层打交道的数据传输对象。) (3) 事务Transaction(org.hibernate.Transaction) 应用程序用来指定原子操做单元范围的对象,它是单线程的,生命周期很短。它经过抽象将应用从底层具体的JDBC、JTA以及CORBA事务隔离 开。某些状况下,一个Session以内可能包含多个Transaction对象。尽管是否使用该对象是可选的,但不管是使用底层的API仍是使用 Transaction对象,事务边界的开启与关闭是必不可少的。 (4) 它没有侵入性,即所谓的轻量级框架 (5) 移植性会很好 (6) 缓存机制,提供一级缓存和二级缓存 (7) 简洁的HQL编程 Hibernate缺点 (1) Hibernate在批量数据处理时有弱势 (2) 针对单一对象简单的增删查改,适合于Hibernate,而对于批量的修改,删除,不适合用Hibernate,这也是OR框架的弱点;要使用数据库的特定优化机制的时候,不适合用Hibernate Hibernate和iBATIS 优缺点比较 (注意:iBATIS 是MyBATIS的前生,也就是1.0版本) Hibernate的特色: Hibernate功能强大,数据库无关性好,O/R映射能力强, Hibernate对数据库结构提供了较为完整的封装,Hibernate的O/R Mapping实现了POJO 和数据库表之间的映射,以及SQL 的自动生成和执行。程序员每每只需定义好了POJO 到数据库表的映射关系,便可经过Hibernate 提供的方法完成持久层操做。程序员甚至不须要对SQL 的熟练掌握, Hibernate/OJB 会根据制定的存储逻辑,自动生成对应的SQL 并调用JDBC 接口加以执行。Hibernate的缺点就是学习门槛不低,要精通门槛更高,并且怎么设计O/R映射,在性能和对象模型之间如何权衡取得平衡,以及怎样用 好Hibernate方面须要你的经验和能力都很强才行,可是Hibernate如今已是主流O/R Mapping框架,从文档的丰富性,产品的完善性,版本的开发速度都要强于iBATIS。 iBATIS的特色: iBATIS入门简单, 即学即用,提供了数据库查询的自动对象绑定功能,并且延续了很好的SQL使用经验,对于没有那么高的对象模型要求的项目来讲,至关完美。iBATIS的缺 点就是框架仍是比较简陋,功能尚有缺失,虽然简化了数据绑定代码,可是整个底层数据库查询实际仍是要本身写的,工做量也比较大,并且不太容易适应快速数据 库修改。当系统属于二次开发,没法对数据库结构作到控制和修改,那iBATIS的灵活性将比Hibernate更适合。系统数据处理量巨大,性能要求极为 苛刻,这每每意味着咱们必须经过通过高度优化的SQL语句(或存储过程)才能达到系统性能设计指标。在这种状况下iBATIS会有更好的可控性和表现。 对于实际的开发进行的比较: 1. iBATIS须要手写sql语句,也能够生成一部分,Hibernate则基本上能够自动生成,偶尔会写一些Hql。一样的需求,iBATIS的工做量比 Hibernate要大不少。相似的,若是涉及到数据库字段的修改,Hibernate修改的地方不多,而iBATIS要把那些sql mapping的地方一一修改。 2. iBatis 能够进行细粒度的优化 比 如说我有一个表,这个表有几个或者几十个字段,我须要更新其中的一个字段,iBatis 很简单,执行一个sql UPDATE TABLE_A SET column_1=#column_1# WHERE id=#id# 可是用 Hibernate 的话就比较麻烦了,缺省的状况下 hibernate 会更新全部字段。 固然我记得 hibernate 有一个选项能够控制只保存修改过的字段,可是我不太肯定这个功能的负面效果。 例 如:我须要列出一个表的部份内容,用 iBatis 的时候,这里面的好处是能够少从数据库读不少数据,节省流量SELECT ID, NAME FROM TABLE_WITH_A_LOT_OF_COLUMN WHERE …通常状况下Hibernate 会把全部的字段都选出来。比 如说有一个上面表有8个字段,其中有一两个比较大的字段,varchar(255)/text。上面的场景中我为何要把他们也选出来呢?用 hibernate 的话,你又不能把这两个不须要的字段设置为lazy load,由于还有不少地方须要一次把整个 domain object 加载出来。这个时候就能显现出ibatis 的好处了。若是我须要更新一条记录(一个对象),若是使用 hibernate,须要现把对象 select 出来,而后再作 update。这对数据库来讲就是两条sql。而iBatis只须要一条update的sql就能够了。减小一次与数据库的交互,对于性能的提高是很是重 要。 3. 开发方面: 开发效率上,我以为二者应该差很少。可维护性方面,我 以为 iBatis 更好一些。由于 iBatis 的 sql 都保存到单独的文件中。而 Hibernate 在有些状况下可能会在 java 代码中保sql/hql。相对Hibernate“O/R”而言,iBATIS 是一种“Sql Mapping”的ORM实现。(iBatis 是将sql写在配置文件中的,而hibernate是本身生成的) 而iBATIS 的着力点,则在于POJO 与SQL之间的映射关系。也就是说,iBATIS并不会为程序员在运行期自动生成SQL 执行。具体的SQL 须要程序员编写,而后经过映射配置文件,将SQL所需的参数,以及返回的结果字段映射到指定POJO。使用iBATIS 提供的ORM机制,对业务逻辑实现人员而言,面对的是纯粹的Java对象,这一层与经过Hibernate 实现ORM 而言基本一致,而对于具体的数据操做,Hibernate会自动生成SQL 语句,而iBATIS 则要求开发者编写具体的SQL 语句。相对Hibernate而言,iBATIS 以SQL开发的工做量和数据库移植性上的让步,为系统设计提供了更大的自由空间。 4. 运行效率 在不考虑 cache 的状况下,iBatis 应该会比hibernate 快一些或者不少。 Spring 框架的优缺点 Spring的优点不言而喻:   1. 提供了一种管理对象的方法,能够把中间层对象有效地组织起来。一个完美的框架“黏合剂”。   2. 采用了分层结构,能够增量引入到项目中。   3. 有利于面向接口编程习惯的养成。   4. 目的之一是为了写出易于测试的代码。   5. 非侵入性,应用程序对Spring API的依赖能够减至最小限度。   6. 一致的数据访问介面。   6. 一个轻量级的架构解决方案 缺点也显而易见 1. 中断了应用程序的逻辑,使代码变得不完整,不直观。此时单从Source没法彻底把握应用的全部行为。  2. 将本来应该代码化的逻辑配置化,增长了出错的机会以及额外的负担。 3. 时光倒退,失去了IDE的支持。在目前IDE功能日益强大的时代,以往代码重构等让人头痛的举动愈来愈容易。并且IDE还提供了诸多强大的辅助功能,使得 编程的门槛下降不少。一般来讲,维护代码要比维护配置文件,或者配置文件+代码的混合体要容易的多。  4. 调试阶段不直观,后期的bug对应阶段,不容易判断问题所在。 经典架构S(Struts)SH的优缺点 Struts、Spring、Hibernate能流行这么多年经久不衰,天然有它的道理。J2EE最早出现的时候,咱们通常是采用 JSP+Servlet+JavaBean+EJB的架构,尤为是1998年~2000年这段时间,互联网的泡沫从兴起到破裂,其波澜壮阔程度,丝绝不亚 于2008年开始的此次经济危机,在那个年代,是否掌握EJB开发技术将直接决定你的薪水可否翻一倍或者几倍。不过,Spring的做者Rod Johnson在2002年根据多年经验撰写了《Expert o-ne-on-One J2EE Design and Development》,其后又发表了著名的《Expert o-ne-on-one J2EE Development without EJB》一书,则完全地改变了传统的J2EE一统天下的开发架构,基于Struts+Hibernate+Spring的J2EE架构也逐渐获得人们的认 可,甚至在大型的项目架构中也逐渐开始应用。下面咱们分别说说Spring、Struts和Hibernate的优缺点。 Spring 是一个开源框架,是为了解决企业应用程序开发复杂性而建立的。框架的主要优点之一就是其分层架构,使得每一个层之间和类与类之间的关系,由原来的强绑定与强 耦合转变为不绑定和松耦合,直接面向接口编程,把设计与实现相分离的原则发挥到极致,对于单元测试也产生了很深远的影响。在Spring出现以前,若是某 个模块没有完成,作单独模块的单元测试仍是很困难的。Spring同时也是 J2EE 应用程序开发的集成框架,由于J2EE是讲究分层理念的,Spring使得J2EE每一个层之间的模块职能更加清晰。 不过,对于大型项目的开发,Spring使得原来难以维护的类与类之间的强耦合关系,转变为更加难以维护的XML文件配置,这个工做量也是很是巨大 的,并且更容易出错。并且,随着每一个应用 模块的升级,这些模块之间的版本,也不会是同步更新的,对于同一个公共组件,有的模块用的多是1.0版本,而另 外一个功能模块用的多是2.0版本,可怕的是1.0版本和2.0版本之间,可能还不兼容,Spring对于这些需求,就无能为力了。因此,有人说 Spring不适合大型项目开发,也是有必定道理的。最近Spring也加入了OSGI标准的实现,也是为了解决不一样版本之间同时存在的这些问题。不过, 随着Spring加入的功能愈来愈多,Spring也就失去了轻量开源框架的特色,变得愈来愈笨重。 虽然Spring如今也支持了所谓的免配置,能够经过@Autowired标签自行绑定,还能够经过 设置自动绑定加载全部的Hibernate对象,可是若是这些上百个或者数十个中的任何一个Entity对象加载失败,则整个Spring服务就启动不起 来了,这与难于部署的EJB有啥区别呢?并且,使人好笑的是,因为使用了@Autowired标签,至关一部分开发人员再也不面向接口编程了,对于 Class A的实例,美其名曰由Spring自行绑定,接口也好,实际实现类也好,就在Spring配置一下就能够了。而Spring最核心的就是面向接口编程和 IOC,没有了面向接口编程,用一个 A a=new A() 来实例化一个Class,有什么不能够呢?少写了一行代码,引入了一个重量级的Spring,究竟为啥使用Spring呢? 对于Hibernate的流行,则是因为开发人员和客户,对于Entity EJB(实体EJB)臃肿的身材及部署的困难,是在极度失望情绪下形成的。既然是轻量级解决方案,那么分布式就不是可选项,没有分布式,那么EJB就无用 武之地了。话又说回来了,Rod Johnson前些年就由于强调绝大部分企业应用是不须要分布式的,从而推出了本身轻量级的Spring解决方案。可是最近一年,随着云计算架构的兴起, 架构是否支持分布式,又是必选项了。技术架构的选型,就跟法国巴黎流行时装同样,今年流行短袖,明年流行下摆,真是典型的十年河东,十年河西。因此,像 SOA、云计算、SaaS、物联网这些大名词,不只会给客户带来很大的困惑,一样也会给程序员、系统分析师、系统架构师、技术总监带来困惑。从确定到否 定,再到自我否认,真是符合大天然螺旋式上升的发展规律。 而对于Struts,它一经推出,几乎战胜了当时的全部竞争对手。Struts的伟大之处,在于它对网页数据的动态绑定。虽然数据绑定不是一个新名 词,微软在1991年推出Visual Basic1.0的时候,就创造性地发明了让VB程序员又爱又恨的数据绑定,可是对于Web 编程,Struts也仍是把数据绑定首次应用到了Web编程上。它可以让人们用Set和Get的形式取得网页数据,而不是单一的黑盒式的 request.getParameter(),从而使得网页数据取值进入面向对象(OO)化时代。 Struts、Hibernate以及Spring自己都是制做精良的框架,可是对于本身产品和项目的应用,一经整合在一块儿,却不必定很适用。好比 说,对于数据库相关的MIS(管理信息系统)系统中,增长、修改、删除、查询功能是最基本、最多见、必不可少的。对于这些最基本的功能,不一样的架构师,则 会作出不一样的选择。有的架构师,选择了自动生成的理念,作一个代码自动生成器,设计好数据库表结构,单击一个脚本,或者用Eclipse插件的形式,作个 图形化生成界面,自动生成SSH框架,完成数据库的增长、修改、删除、查询操做。这么作的好处是数据库修改了,代码自动生成就能够了,使得程序员不用再维 护这些无聊的代码。不过缺陷也是致命的,一是随着Struts、Hibernate、Spring的升级,这个工具也不得不跟着升级,而作这个工具的程序 员,可能早就离开公司了,后续版本没法维护;二是若是有的业务逻辑跟这些生成的代码有交叉,数据库变动后,代码也没法再次生成了。三是公司的系统架构,则 被严重限制在SSH架构基础上,再也没法改变。有人会问:即便限制在这三种架构上,有何很差吗?假设有客户问,你的框架支持云计算吗?你总不能说”因为 Struts、Hibernate、Spring 不支持云计算架构,因此我也不支持”以此取得客户谅解吧。所以,依赖于第三方架构的产品体系架构,随着时间的推移,受到的限制会愈来愈大。

相关文章
相关标签/搜索