精华内容
下载资源
问答
  • spring的优缺点

    千次阅读 2018-11-10 14:57:32
    再来看看Spring有哪些缺点 1.jsp中要写很多代码、控制器过于灵活,缺少一个公用控制器 2.Spring不支持分布式,这也是EJB仍然在用的原因之一。 首先Spring 是一个框架,使用Spring并不代表代码质量的提高,就像...

    大部分项目都少不了spring的身影,为什么大家对他如此青睐,而且对他的追捧丝毫没有减退之势呢

    我们看一个框架是否优秀,首先看这个框架是否是非侵入式的,其次是可扩展性,再次是解耦性和开发周期。

    Spring是什么?

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

    说它轻量级有一大部分原因是相对与EJB的(虽然本人从没有接触过EJB的应用),重要的是,Spring是非侵入式的(所谓非侵入式就是远程调试 而不植入,spring不再用new的方式来创建对象,而是使用依赖注入的方式),基于spring开发的应用一般不依赖于spring的类。

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

    AOP:Spring对面向切面编程提供了强有力的支持,通过它让我们将业务逻辑从应用服务(如事务管理)中分离出来,实现了高内聚开发(所谓高内聚是指一个软件模块是由相关性很强的代码组成,只负责一项任务,也就是常说的单一责任原则。),应用对象只关注业务逻辑,不再负责其它系统问题(如日志、事务等)。Spring支持用户自定义切面。

    面向切面编程是面向对象编程的有力补充。面向对象编程将程序分成各个层次的对象,面向切面的程序将运行过程分解成各个切面。AOP是从运行程序的角度去考虑程序的结构,提取业务处理过程的切面,OOP是静态的抽象,AOP是动态的抽象,是对应用执行过程的步骤进行抽象,从而获得步骤之间的逻辑划分。

    容器:Spring是个容器,因为它包含并且管理应用对象的生命周期和配置。如对象的创建、销毁、回调等。

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

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

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

    2.可以提供众多服务,事务管理,WS等。

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

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

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

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

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

    再来看看Spring有哪些缺点

    1.jsp中要写很多代码、控制器过于灵活,缺少一个公用控制器

    2.Spring不支持分布式,这也是EJB仍然在用的原因之一。

    首先Spring 是一个框架,使用Spring并不代表代码质量的提高,就像盖房子选择用上海的地皮还是北京的地皮一样,房子质量与土地所在的城市无关,与房子的具体设计方案和选料有关。
    使用Spring 等框架可以简化很多基础性的工作,配置好后可以方便构建业务应用。

    框架使用多了会有局限的感觉,像小鸟被套在笼子里,无法飞出去,虽然在笼子里面吃喝不愁。目前编程的门槛越来越低,诸多开源框架广泛传播,几乎没有什么技术门槛,会配置就会编程,而一个好的DBA对软件性能会有很大提高,软件的核心逻辑最终会转移到对数据库的操作上,而且对目前从事的工作来讲,感觉技术的瓶颈越来越多的局限在对数据库的操作上,下一步要认真提高下了。

    Spring的优势不言而喻:

    1. 提供了一种管理对象的方法,可以把中间层对象有效地组织起来。一个完美的框架“黏合剂”。

    2. 采用了分层结构,可以增量引入到项目中。

    3. 有利于面向接口编程习惯的养成。

    4. 目的之一是为了写出易于测试的代码。

    5. 非侵入性,应用程序对Spring API的依赖可以减至最小限度。

    6. 一致的数据访问介面。

    6. 一个轻量级的架构解决方案。

    对Spring的理解

    Spring致力于使用POJOs来构建应用程序。由框架提供应用程序的基础设施,将只含有业务逻辑的POJOs作为组件来管理。从而在应用程序中形成两条相对独立发展的平行线,并且在各自的抽象层面上延长了各自的生命周期。

    Spring的工作基础是Ioc。Ioc将创建对象的职责从应用程序代码剥离到了框架中,通常2中注入方式:setter 和 ctor参数。

    每个Bean定义被当作一个POJO(通过类名和JavaBean的初始属性或构造方法参数两种方式定义的Bean)。

    Spring的核心在org.springframework.beans,更高抽象层面是BeanFactory. BeanFactory是一个非常轻量级的容器。

    关于可维护性的思考

    Spring之类的技术确实带来了应用系统的可维护性的提高吗?

    Ioc, AOP之类的技术,本质上都是将原本位于应用程序代码中"硬编码"逻辑,剥离出来放到了配置文件中(或者其他形式)。主流声音都是认为提高了应用程序的可维护性。

    但如果从以下方面观察,结合项目实际经验,个人感觉这些技术的应用大大降低了应用程序的可维护性,尤其是面对一个陌生的系统,或者项目人员变动频繁的时候。

    1. 中断了应用程序的逻辑,使代码变得不完整,不直观。此时单从Source无法完全把握应用的所有行为。

    2. 将原本应该代码化的逻辑配置化,增加了出错的机会以及额外的负担。

    3. 时光倒退,失去了IDE的支持。在目前IDE功能日益强大的时代,以往代码重构等让人头痛的举动越来越容易。而且IDE还提供了诸多强大的辅助功能,使得编程的门槛降低很多。通常来说,维护代码要比维护配置文件,或者配置文件+代码的混合体要容易的多。

    4. 调试阶段不直观,后期的bug对应阶段,不容易判断问题所在。

    首先Spring 是一个框架,使用Spring并不代表代码质量的提高,就像盖房子选择用上海的地皮还是北京的地皮一样,房子质量与土地所在的城市无关,与房子的具体设计方案和选料有关。
    使用Spring 等框架可以简化很多基础性的工作,配置好后可以方便构建业务应用。

    框架使用多了会有局限的感觉,像小鸟被套在笼子里,无法飞出去,虽然在笼子里面吃喝不愁。目前编程的门槛越来越低,诸多开源框架广泛传播,几乎没有什么技术门槛,会配置就会编程,而一个好的DBA对软件性能会有很大提高,软件的核心逻辑最终会转移到对数据库的操作上,而且对目前从事的工作来讲,感觉技术的瓶颈越来越多的局限在对数据库的操作上,下一步要认真提高下了。

    Spring的优势不言而喻:

    1. 提供了一种管理对象的方法,可以把中间层对象有效地组织起来。一个完美的框架“黏合剂”。

    2. 采用了分层结构,可以增量引入到项目中。

    3. 有利于面向接口编程习惯的养成。

    4. 目的之一是为了写出易于测试的代码。

    5. 非侵入性,应用程序对Spring API的依赖可以减至最小限度。

    6. 一致的数据访问介面。

    6. 一个轻量级的架构解决方案。

    对Spring的理解

    Spring致力于使用POJOs来构建应用程序。由框架提供应用程序的基础设施,将只含有业务逻辑的POJOs作为组件来管理。从而在应用程序中形成两条相对独立发展的平行线,并且在各自的抽象层面上延长了各自的生命周期。

    Spring的工作基础是Ioc。Ioc将创建对象的职责从应用程序代码剥离到了框架中,通常2中注入方式:setter 和 ctor参数。

    每个Bean定义被当作一个POJO(通过类名和JavaBean的初始属性或构造方法参数两种方式定义的Bean)。

    Spring的核心在org.springframework.beans,更高抽象层面是BeanFactory. BeanFactory是一个非常轻量级的容器。

    关于可维护性的思考

    Spring之类的技术确实带来了应用系统的可维护性的提高吗?

    Ioc, AOP之类的技术,本质上都是将原本位于应用程序代码中"硬编码"逻辑,剥离出来放到了配置文件中(或者其他形式)。主流声音都是认为提高了应用程序的可维护性。

    但如果从以下方面观察,结合项目实际经验,个人感觉这些技术的应用大大降低了应用程序的可维护性,尤其是面对一个陌生的系统,或者项目人员变动频繁的时候。

    1. 中断了应用程序的逻辑,使代码变得不完整,不直观。此时单从Source无法完全把握应用的所有行为。

    2. 将原本应该代码化的逻辑配置化,增加了出错的机会以及额外的负担。

    3. 时光倒退,失去了IDE的支持。在目前IDE功能日益强大的时代,以往代码重构等让人头痛的举动越来越容易。而且IDE还提供了诸多强大的辅助功能,使得编程的门槛降低很多。通常来说,维护代码要比维护配置文件,或者配置文件+代码的混合体要容易的多。

    4. 调试阶段不直观,后期的bug对应阶段,不容易判断问题所在。

    作者:痴情的稀饭
    来源:CSDN
    原文:https://blog.csdn.net/xingxiupaioxue/article/details/68943036
    版权声明:本文为博主原创文章,转载请附上博文链接!

    展开全文
  • 三层架构优缺点

    2011-11-06 22:04:41
    随着软件工程的不断进步和规范以及面向对象编程思想的应用,人们对封装、复用、扩展、移置等方面的要求,使得双层架构显然更加臃肿繁琐,三层程序架构体系应运而生,可以说,三层架构体系结构是面向对象思想发展中...
  • C++发展概述、优缺点及应用领域

    千次阅读 2019-08-06 17:43:20
    个人观点(C++虽功能...C++是一门以C为基础发展而来的一门面向对象的高级程序设计语言,从1983年由Bjarne Stroustrup教授在贝尔实验室创立开始至今,已有30多个年头。C++从最初的C with class,经历了从C++98、C+...

    个人观点(C++虽功能强大,但是底层还是调用C,C++为了吸引更多的C程序员,功能过于丰富且复杂,一定程度上反而降低了可编程的实用性。但是不可否认C++

    也是一门艺术。)

    C++是一门以C为基础发展而来的一门面向对象的高级程序设计语言,从1983年由Bjarne Stroustrup教授在贝尔实验室创立开始至今,已有30多个年头。C++从最初的C with class,经历了从C++98、C++ 03、C++ 11、C++ 14再到C++17多次标准化改造,功能得到了极大的丰富,已经演变为一门集面向过程、面向对象、函数式、泛型和元编程等多种编程范式的复杂编程语言,入门具有一定的难度。由于C++过于复杂,并且经历了长时间的发展演变,目前对于C++标准支持的较好主要有GNU C++和Visual C++,严格来说,目前还没有一个完全支持ISO C++的版本。

    1954年,John Backus发明了世界上第一种计算机高级语言Fortran,为之后出现的高级编程语言奠定了基础。1970年,AT&T的Bell实验室的 Ken Thompson,以BCPL语言为基础,设计出简单且接近硬件的B语言(取BCPL的首字母),并且他用B语言写了第一个Unix操作系统。到了1972年,Bell实验室的Dennis Ritchie和Ken Thompson共同发明了C语言,并使用C重写Unix。1979年,Bjame Stroustrup到了Bell实验室,开始从事将C改良为带类的C(C with Classes)的工作,1983年该语言被正式命名为C++,主要意图是表明C++是C的增强版,1985年发布了第一个C++版本。

    第一个版本的C++,因其面向对象的思想使得编程变得简单,并且又保持了C语言的运行效率,在推出的一段时间内,得到了快速的发展,占据了编程语言界的半壁江山。从1985年到1998年,C++从最初的C with Classes新增了很多其他的特性,比如异常处理、模板、标准模板库(STL)、运行时异常处理(RTTI)与名字空间(Namespace)等。1998年,C++标准委员会统筹C++的所有特性,发布了第一个C++国际标准C++98。从1998年到2003年,是C++标准从C++98到C++03的迭代期,期间C++扩增了很多额外的特性,比如以Boost MPL(Boost Metaprogramming Library)与Loki等为代表的模板元编程库的出现,让开发者更加便捷的使用C++在编译期的执行能力,即通过代码编译获得计算结果,学术性的称为模板元编程。到了2003年,C++标准委员会总结最新技术并发布了C++03标准。从2003年到2011年,也就是从C++03到C++11,期间C++引入了对象移动、右值引用、lamba表达式(函数式编程)、编译时类型识别(auto)、别名模板以及很多新型关键词(如nullptr、decltype、constexpr)等现代编程语言常具备的能力,让C++与时俱进,开发效率得到了很大的提升。这些新的特性随着C++11标准的发布而被正式确立下来。近年来,C++标准的变更周期缩短,由C++11到C++14以及最近的C++17都只用了3年的时间。C++14引入了二进制文字常量、将类型推导从Lambda函数扩展到所有函数、变量模板以及数字分位符等。C++14 是对 C++11的重要补充和优化,是C++发展历程中的一个小型版本,虽然新增的内容较少,但是仍然为用户“带来了极大的方便”,为实现使C++“对新手更为友好”这一目标作出努力。到了2017年,C++迎来了C++17标准。此次对C++的改进和扩增,让C++变得更加容易接受和便于使用了。C++17引入了许多新的特性,比如类模板参数推导、UTF-8文字常量、fold表达式、新类型以及新的库函数等。

    C++仍在不断的发展,下一个版本将是C++20,C++历史上的标准变更如下。

    年份C++ 标准名称非正式名称
    1998ISO/IEC 14882:1998C++98
    2003ISO/IEC 14882:2003C++03
    2011ISO/IEC 14882:2011C++11
    2014ISO/IEC 14882:2014C++14
    2017ISO/IEC 14882:2017C++17
    2020Yet to be determinedC++20

     

     

     

     

     

     

     

    语言的发展是一个逐步递进的过程,C语言也不例外,C语言也有自己的标准。C语言从1972诞生以来,先后经历了K&R C、ANSI C、C89、C99和最新的C11标准的变更,其特性不断丰富,功能不断强大。语言的发展也是相互促进和交融吸收的,C++是直接从C语言发展过来的,而C语言是从B语言发展过来的,B语言则是从BCPL发展而来,BCPL(Basic CPL)则从CPL发展而来,CPL则从ALGOL60演变而来。每一门新语言的诞生以及后续的演变和发展,都站在了其他语言的肩膀之上,取其精华,弃其糟粕,让语言变得更加的强大。

    优缺点:

    现在的趋势是多语言混成编程,故本文是针对混合编程。
    1,C++优势:
    1.1,性能优势。
    1.2,可进化性(可复用性),进化出本团队顺手的类库。
    2,C++小的优势或疑似优势:
    2.1,“万金油”。混合编程时代,“万金油”价值小。

    • 相对于其他的语言,C++具有它自己的优势,主要体现在以下几个方面:

          1、 C++实现了面向对象程序设计。在高级语言当中,处理运行速度是最快的,大部分的游戏软件,系统都是由C++来编写的。

          2、 C++语言非常灵活,功能非常强大。如果说C语言的优点是指针,那么C++的优点就是性能和类层次结构的设计。

          3、C++非常严谨、精确和数理化,标准定义很细致。

          4、 C++语言的语法思路层次分明、相呼应;语法结构是显式的、明确的。

          当然,这只是C++的一部分优势,在运用过程中,我们会逐渐发现C++语言之美。



    3,C++根本缺点:
    难学。新手被指针搞死,中手(约3年工作经验)被stl标准库和模板搞死,高手(约5年工作经验)被boost搞死。由于stl难懂,大量的项目禁用stl。我曾经看了一段20行的stl代码,看了30分钟,发现两行代码(两个for)就可以搞定。csdn有一个真实的案例,某个项目有了较多的boost,那人离职后,项目就费了。请一个boost高手的成本比重写项目还高。
    4,缓解的方法:
    C++软件工程师进一步分工:
    a,新手主要负责界面,只需要会使用指针,无需管理指针。管理指针封装在基础库中。
    b,中手老手负责逻辑层。
    c,专人负责与数据库打交道。

    5,C++非根本缺点:
    5.1可理解性差。“难学”引起,其实熟悉stl的人看熟悉stl的人代码很好理解。解决方法:
    a,分成若干个库,新手参与的库,禁止或少用stl。
    b,stl中的常用功能,重写在一个新库中,此库可理解性最重要。
    6,小缺点或不是缺点。
    6.1.门槛高。新手无需用到指针管理、内存管理、线程管理,直接用stl的vector或MFC的CArray分配空间。内存管理、线程管理一个产品、项目只需要一个人会,就可以了。
    6.2,开发效率低。如果有多年积累的基础库,开发效率反而高。因为这些基础库,是非常适合当前团队的。
    6.3,初级程序员易犯错误。初级程序员,只有权限修改少量库(以界面居多)。    

     C++两个关键缺陷

        即语言的过度复杂和标准库的过度苍白。

        C++语言过于复杂在业界是共识。一个指针就使C++比关键字数目相同的语言复杂许多,导入模板后各种应用精巧的应用使这门语言进一步复杂化,而C++0x使这复杂性又升华了。

        C++语言已经无法简化,如果编译器能够提供可定制编译也许对这个语言会有帮助。比如:设定某个选项后,C++就变成了有对象的C。设置某个选项后,多重继承就不支持了。可是这样的发展也还是需要很长一段时间的发展的。

        C++语言功能是很强大的,其运行效率也一度得到很多人的肯定,但是事物优缺点的同时存在是客观事实,我们应该正视这点,这也是我们南宁达内科技讲师提醒学生们应该要注意的一点,在运用过程中,要了解C++语言所存在的两个关键性的缺陷,这样才能避免实际操作中的更多的错误。

    相对与java和C

    宽泛点来说,从结果角度上看C几乎什么都能做,C++几乎什么都能做好。但是从开发成本上说,很多情况下C/C++不是最好的选择。眼下C最主要的使用领域应该是Unix系系统的开发以及某些Unix系系统的软件的相关开发。C++恐怕还是游戏开发。

    作为通用语言,可以适应各种类型的开发算是必备属性(同理,Java其实也是几乎什么都能做,只是限制相对来说要大一点并且很多事情做不了那么好)。C/C++的规则比较宽泛,可以用来进行一些更贴近硬件的开发,而大部分C/C++开发环境也是这么做的。这造成相对来说用C/C++开发往往对其他语言的依赖比较小。

    C++方面,因为C++还同时具有完整的元编程功能(虽然并不特别好用),使得在保证功能的前提下也是目前性能最高的语言之一。所以当开发一个软件特别是对性能有需求的软件的时候,就算别的开发语言都不能用,最后总还是有C++可以用。
     

    展开全文
  • Json优缺点

    千次阅读 2018-06-20 08:25:34
     围绕Ajax原理构建的那些Web应用程序最能说明XML的生存能力,从这一点来看,一种新的有效负载格式的发展壮大也得益于XML。这种新的有效负载格式就是JavaScript Object Notation (JSON)。在探索这种新的标记语言的...

    XML——这种用于表示客户端与服务器间数据交换有效负载的格式,几乎已经成了Web services的同义词。然而,由于Ajax和REST技术的出现影响了应用程序架构,这迫使人们开始寻求`XML的替代品,如:JavaScript Object Notation(JSON)。 

      JSON 作为一种更轻、更友好的 Web services客户端的格式(多采用浏览器的形式或访问 REST风格 Web服务的Ajax应用程序的形式)引起了 Web 服务供应商的注意。 

    XML的十字路口: 浏览器和 Ajax 
      XML设计原理已经发布了将近十年。时至今日,这种标记语言已经在广阔的软件应用领域中占据了主导地位。从Java、.NET等主流平台中的配置和部署描述符到应用集成场景中更复杂的应用,XML与生俱来的语言无关性使之在软件架构师心目中占据着独特的地位。但即便最著名的XML权威也不得不承认:在某些环境中,XML的使用已经超出了它自身能力的极限。 

      围绕Ajax原理构建的那些Web应用程序最能说明XML的生存能力,从这一点来看,一种新的有效负载格式的发展壮大也得益于XML。这种新的有效负载格式就是JavaScript Object Notation (JSON)。在探索这种新的标记语言的复杂性之前,首先来分析一下在这种独特的设计形式中,XML具有哪些局限性。 

      Ajax建立了一个用于从远程Web services发送和接收数据的独立信道,从而允许Web程序执行信道外(out-of-band)客户端/服务器调用。通俗地说,Ajax程序中的更新和导航序列在典型的客户端/服务器环境之外完成,在后台(即信道外)接受到信息后,必须进行一次完整的屏幕刷新。更多背景信息,请参阅David Teare的 Ajax简介(Dev2Dev)。 

      这些应用程序更新通常是通过REST风格(RESTful)Web services获得的,一旦被用户的浏览器接收到,就需要整合到HTML页面的总体布局之中,这正是XML发挥强大力量的场合。尽管近年来,脚本语言支持和插件支持已使大多数主流浏览器的功能得到了强化,但许多编程任务依然难于开展,其中之一就是操纵或处理文本,这通常是使用DOM实现的。 

      采用DOM的复杂性源于其基于函数的根,这使得对数据树的简单修改或访问都需要进行无数次方法调用。此外,众所周知,DOM在各种浏览器中的实现细节不尽相同,这一过程将带来极为复杂的编程模式,其跨浏览器兼容性出现问题的可能性极大。接下来的问题显而易见,那就是:如何使一种标记语言轻松集成到HTML页面中以满足Ajax的要求? 

      问题的答案就是:利用所有主流浏览器中的一种通用组件——JavaScript引擎。XML需要使用DOM之类的机制来访问数据并将数据整合到布局之中,采用这种方法,我们不再使用像XML这样的格式来交付Ajax更新,而是采用一种更为简单直观的方式,采用JavaScript引擎自然匹配的格式——也就是JSON。 

      既然已经明确了JSON与XML和Ajax之间的关系,下面将进一步探讨JSON背后的技术细节。 

    JSON剖析:优点和不足 
      对于JSON,首先要明白JSON和XML一样也是一种简单文本格式。相对于XML,它更加易读、更便于肉眼检查。在语法的层面上,JSON与其他格式的区别是在于分隔数据的字符,JSON中的分隔符限于单引号、小括号、中括号、大括号、冒号和逗号。下图是一个JSON有效负载:

    Java代码  复制代码
    1. {"addressbook": {"name""Mary Lebow",   
    2.     "address": {   
    3.         "street""5 Main Street"  
    4.         "city""San Diego, CA",   
    5.         "zip"91912,   
    6.     },   
    7.     "phoneNumbers": [   
    8.         "619 332-3452",   
    9.         "664 223-4667"  
    10.     ]   
    11.  }   
    12. }  
    [java]  view plain  copy
    1. {"addressbook": {"name""Mary Lebow",  
    2.     "address": {  
    3.         "street""5 Main Street"  
    4.         "city""San Diego, CA",  
    5.         "zip"91912,  
    6.     },  
    7.     "phoneNumbers": [  
    8.         "619 332-3452",  
    9.         "664 223-4667"  
    10.     ]  
    11.  }  
    12. }  

      将上面的JSON有效负载用XML改写,如下: 

    Xml代码  复制代码
    1. <addressbook>  
    2.  <name>Mary Lebow</name>  
    3.  <address>    
    4.     <street>5 Main Street</street>  
    5.     <city zip="91912"> San Diego, CA </city>  
    6.     <phoneNumbers>  
    7.       <phone>619 332-3452</phone>  
    8.       <phone>664 223-4667</phone>  
    9.     </phoneNumbers>  
    10.  </address>  
    11. </addressbook>  
    [xml]  view plain  copy
    1. <addressbook>  
    2.  <name>Mary Lebow</name>  
    3.  <address>   
    4.     <street>5 Main Street</street>  
    5.     <city zip="91912"> San Diego, CA </city>  
    6.     <phoneNumbers>  
    7.       <phone>619 332-3452</phone>  
    8.       <phone>664 223-4667</phone>  
    9.     </phoneNumbers>  
    10.  </address>  
    11. </addressbook>  

      是不是很相似?但它们并不相同。下面将详细阐述采用JSON句法的优点和不足。 

    优点 
      乍看上去,使用JSON的数据分隔符的优点可能并不那么明显,但存在一个根本性的缘由:它们简化了数据访问。使用这些数据分隔符时, JavaScript引擎对数据结构(如字符串、数组、对象)的内部表示恰好与这些符号相同。 

      这将开创一条比DOM技术更为便捷的数据访问途径。下面列举几个JavaScript代码片段来说明这一过程,这些代码片段会访问先前的JSON代码片段中的信息: 

    访问JSON中的名称: addressbook.name 
    访问JSON中的地址: addressbook.address.street 
    访问JSON中的电话号码第一位:addressbook.address.phoneNumbers[0] 
      如果您具备DOM编程经验,就能很快地看出区别;新手可以参看 Document Object Model 的这一外部资源,这里提供了关于数据导航的实例。 

      JSON的另一个优点是它的非冗长性。在XML中,打开和关闭标记是必需的,这样才能满足标记的依从性;而在JSON中,所有这些要求只需通过一个简单的括号即可满足。在包含有数以百计字段的数据交换中,传统的XML标记将会延长数据交换时间。目前还没有正式的研究表明JSON比XML有更高的线上传输效率;人们只是通过简单的字节数比较发现,对于等效的JSON和XML有效负载,前者总是小于后者。至于它们之间的差距有多大,特别是在新的XML压缩格式下它们的差距有多大,有待进一步的研究。 

      此外,JSON受到了擅长不同编程语言的开发人员的青睐。这是因为无论在Haskell中或 Lisp中,还是在更为主流的C#和PHP中,开发都可以方便地生成JSON(详见 参考资料)。 

    不足 
      和许多好东西都具有两面性一样,JSON的非冗长性也不例外,为此JSON丢失了XML具有的一些特性。命名空间允许不同上下文中的相同的信息段彼此混合,然而,显然在JSON中已经找不到了命名空间。JSON与XML的另一个差别是属性的差异,由于JSON采用冒号赋值,这将导致当XML转化为JSON时,在标识符(XML CDATA)与实际属性值之间很难区分谁应该被当作文本考虑。 

      另外,JSON片段的创建和验证过程比一般的XML稍显复杂。从这一点来看,XML在开发工具方面领先于JSON。尽管如此,为了消除您对这一领域可能存在的困惑,

    展开全文
  • 因此本文将对比这三种Java流行框架,分析它们的产生和各自的优缺点。 一、Struts、Hibernate和Spring的产生 1、Struts 传统的Java Web应用程序是采用JSP+Servlet+Javabean来实现的,这种模式实现了最基本的M...

    最近几年Java一直名列最受欢迎的编程语言榜前,而在Java开发中Struts、Hibernate和Spring这三流行框架常常起了关键作用。因此本文将对比这三种Java流行框架,分析它们的产生和各自的优缺点。
    在这里插入图片描述
    一、Struts、Hibernate和Spring的产生

    1、Struts

    传统的Java Web应用程序是采用JSP+Servlet+Javabean来实现的,这种模式实现了最基本的MVC分层,使的程序结构分为几层,有负责前台展示的JSP、负责流程逻辑控制的Servlet以及负责数据封装的Javabean。但是这种结构仍然存在问题:如JSP页面中需要使用<%%>符号嵌入很多的Java代码,造成页面结构混乱,Servlet和Javabean负责了大量的跳转和运算工作,耦合紧密,程序复用度低等等。

    为了解决这些问题,出现了Struts框架,它是一个完美的MVC实现,它有一个中央控制类(一个Servlet),针对不同的业务,我们需要一个Action类负责页面跳转和后台逻辑运算,一个或几个JSP页面负责数据的输入和输出显示,还有一个Form类负责传递Action和JSP中间的数据。JSP中可以使用Struts框架提供的一组标签,就像使用HTML标签一样简单,但是可以完成非常复杂的逻辑。从此JSP页面中不需要出现一行<%%>包围的Java代码了。

    2、Hibernate

    可是所有的运算逻辑都放在Struts的Action里将使得Action类复用度低和逻辑混乱,所以通常人们会把整个Web应用程序分为三层,Struts负责显示层,它调用业务层完成运算逻辑,业务层再调用持久层完成数据库的读写。

    使用JDBC连接来读写数据库,我们最常见的就是打开数据库连接、使用复杂的SQL语句进行读写、关闭连接,获得的数据又需要转换或封装后往外传,这是一个非常烦琐的过程。

    这时出现了Hibernate框架,它需要你创建一系列的持久化类,每个类的属性都可以简单的看做和一张数据库表的属性一一对应,当然也可以实现关系数据库的各种表件关联的对应。当我们需要相关操作是,不用再关注数据库表。我们不用再去一行行的查询数据库,只需要持久化类就可以完成增删改查的功能。使我们的软件开发真正面向对象,而不是面向混乱的代码。我的感受是,使用Hibernate比JDBC方式减少了80%的编程量。

    3、Spring

    现在我们有三个层了,可是每层之间的调用是怎样的呢?比如显示层的Struts需要调用一个业务类,就需要new一个业务类出来,然后使用;业务层需要调用持久层的类,也需要new一个持久层类出来用。通过这种new的方式互相调用就是软件开发中最糟糕设计的体现。简单的说,就是调用者依赖被调用者,它们之间形成了强耦合,如果我想在其他地方复用某个类,则这个类依赖的其他类也需要包含。程序就变得很混乱,每个类互相依赖互相调用,复用度极低。如果一个类做了修改,则依赖它的很多类都会受到牵连。 为此,出现Spring框架。

    Spring的作用就是完全解耦类之间的依赖关系,一个类如果要依赖什么,那就是一个接口。至于如何实现这个接口,这都不重要了。只要拿到一个实现了这个接口的类,就可以轻松的通过xml配置文件把实现类注射到调用接口的那个类里。所有类之间的这种依赖关系就完全通过配置文件的方式替代了。所以Spring框架最核心的就是所谓的依赖注射和控制反转。

    现在的结构是,Struts负责显示层,Hibernate负责持久层,Spring负责中间的业务层,这个结构是目前国内最流行的Java Web应用程序架构了。另外,由于Spring使用的依赖注射以及AOP(面向方面编程),所以它的这种内部模式非常优秀,以至于Spring自己也实现了一个使用依赖注射的MVC框架,叫做Spring MVC,同时为了很好的处理事物,Spring集成了Hibernate,使事物管理从Hibernate的持久层提升到了业务层,使用更加方便和强大。

    二、Struts、Hibernate和Spring的优点

    1、struts

    为了更详细地阐述现代软件工程师广泛使用的Java框架,这里我们为大家介绍ApacheStruts1的后续版本Struts2。Struts2用于构建当代JavaEEWeb应用程序。Apache软件基金会为开发人员提供了一个广泛的工具,用于创建企业级面向Web的应用程序,开发过程的优化贯彻始终,甚至连后期维护也囊括其中,到最终点优化开发过程以及后期维护。如果您在为高负载系统(如广播门户)发愁,那么Struts将会是你的不二选择。

    由于Struts2实现了Action类(普通POJO对象),所以测试编写代码所需的工作量较少。使用框架API,耦合变得更容易,有助于调整拦截器。

    2、Hibernate

    Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。

    Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序实用,也可以在Servlet/JSP的Web应用中使用,最具革命意义的是,Hibernate可以在应用EJB的J2EE架构中取代CMP,完成数据持久化的重任。

    大多数开发机构经常采取创建各自独立的数据持久层。一旦底层的数据结构发生改变,那么修改应用的其余部分使之适应这种改变的代价将是十分巨大的。Hibernate适时的填补了这一空白,它为Java应用提供了一个易用的、高效率的对象关系映射框架。hibernate是个轻量级的持久性框架,功能却非常丰富。

    虽然Hibemate不在RebelLabs的排行榜中,但它仍是值得一提的Java框架。这个映射Java框架解决了对象和关系不匹配的问题,采用持续的数据库访问操作来代替高层次的对象处理功能。每个企业的应用程序都是不同的,所以Hibernate配备了一个强大啊的功能套件,帮助后端开发人员微调数据访问层。这是一个高级的ORM框架,允许您对Java对象(实体)执行数据库操作,利用Hibernate缓存将数据从Java环境持久化到数据库是一个持久化的概念。

    3、Spring

    它是一个开源的项目,而且目前非常活跃;它基于IoC(Inversion of Control,反向控制)和AOP的构架多层j2ee系统的框架,但它不强迫你必须在每一层 中必须使用Spring,因为它模块化的很好,允许你根据自己的需要选择使用它的某一个模块;它实现了很优雅的MVC,对不同的数据访问技术提供了统一的 接口,采用IoC使得可以很容易的实现bean的装配,提供了简洁的AOP并据此实现Transcation Managment,等等。

    Spring以绝对优势登顶不是没有理由的,它之所以能够成为最知名的Java框架,主要是因为:

    1.使用POJO简化测试数据的注入。

    2.增强的模块化,使代码拥有更好的可读性。

    3.不同模块之间解耦合。

    4.灵活应用依赖注入(DI)。

    三、Struts、Hibernate和Spring的的缺点

    1、struts

    Taglib是Struts的一大优势,但对于初学者而言,却需要一个持续学习的过程,甚至还会打乱你网页编写的习惯,但是,当大家习惯了它时,你会觉得它真的很棒。

    Struts将MVC的Controller一分为三,在获得结构更加清晰的同时,也增加了系统的复杂度。

    ActionForms使用不便、无法进行单元测试(StrutsTestCase只能用于集成)

    2、Hibernate

    它限制大家所使用的对象模型。(例如,一个持久性类不能映射到多个表)其独有的界面和可怜的市场份额也让人不安,尽管如此,Hibernate 还是以其强大的发展动力减轻了这些风险。其他的开源持久性框架也有一些,不过都没有 Hibernate 这样有市场冲击力。

    3、Spring

    使用人数不多、jsp中要写很多代码

    以上就是我整理的Java流行框架Struts、Hibernate和Spring对比分析,希望可以帮助到大家。

    展开全文
  • 今天再次与人探讨到网站图片存放话题,于是乎想起了经典的图片存放的虚拟应用程序。也就是IIS发布时候的“添加虚拟目录...此功能如今在图片共享用途上已经逐步被对象存储服务所替代。 这个功能在传统架...
  • 目前在多数RDDMS产品中使用标准查询语言SQL,允许用户几乎毫无差别地从一个产品到另一个产品存取信息。与关系数据库接口的应用软件具有相似的程序访问机制,提供大量标准的数据存取方法。 b.结构简单:从数据...
  • 浅谈JPA优缺点

    万次阅读 2019-11-13 23:31:26
    ORM映射元数据,JPA支持XML和JDK 5.0注解两种元数据的形式,元数据描述对象和表之间的映射关系,框架据此将实体对象持久化到数据库表中; JPA的API,用来操作实体对象,执行CRUD操作,框架在后台替我们完成所有的...
  • javascript优缺点

    千次阅读 2017-06-27 11:12:08
    JavaScript是一种基于对象(Object)和事件驱动(Event Driven)并具有相对安全性的客户端脚本语言。同时也是一种广泛用于客户端Web开发的脚本语言,常用来给HTML网页添加动态功能,比如响应用户的各种操作。它最初...
  • 压缩感知

    千次阅读 2018-10-07 21:26:43
    摘 要:随着信息技术的发展,人们对信息的巨量需求以及硬件的发展缓慢造成了信号采样,传输和存储的巨大压力。如何解决在现有的硬件基础上传输大量的信息成为热点研究的内容。近年来压缩感知的出现为缓解这些压力提供...
  • C#语言基础原理及优缺点

    万次阅读 2014-11-08 17:01:01
    C#是专门为.net程序框架而创造的语言。 .net框架有ms的.netFramework, Mono的.NetFramework。 net程序编译和执行过程中的流程图: 优点: 缺点: 总结:
  • 你知道Docker有哪些优缺点嘛?

    千次阅读 2020-05-07 23:01:22
    优缺点 部署方便 在我们最开始学习编程的时候,搭建环境这一步往往会耗费我们好几个小时的时间,而且其中一个小问题可能需要找很久才能够解决。你还会得到关于环境搭建方面的团队其他成员的求助。而有了容器之后,...
  • 各种流行编程语言的优缺点

    千次阅读 2019-04-17 20:33:00
    python作为一门高级编程语言,它的诞生虽然很偶然,但是它得到程序员的喜爱却是必然之路,以下是Python与其他编程语言的优缺点对比: 1. Python 优势:简单易学,能够把用其他语言制作的各种模块很轻松地联结在...
  • 分布式存储与传统存储对比优缺点

    千次阅读 2020-07-24 16:55:45
    实际上,传统阵列存储也在向软硬件分离方向发展,也是一种软件定义的存储方式,在新的方式下,统一的存储不再需要额外的添加NAS机头,用软件方式来实现。 分布式存储方面,以对象存储、软件定义存储、云存储、超...
  • 软件开发模型和优缺点

    万次阅读 2018-04-05 16:30:27
    优点: 生命周期短 整合“边做边改”与“瀑布模型”优点 减少软件需求不明确带来的开发风险 适用于小型、交互型的系统,大型系统的某些部分 缺点: 所选用的开发技术和工具不一定符合主流的发展;快速建立起来的...
  • 机器学习常见算法分类,算法优缺点汇总

    万次阅读 多人点赞 2017-04-14 12:08:13
    深度学习算法是对人工神经网络的发展。 在近期赢得了很多关注, 特别是 百度也开始发力深度学习后 , 更是在国内引起了很多关注。 在计算能力变得日益廉价的今天,深度学习试图建立大得多也复杂得多的神经网络。很多...
  • 图像分割综述

    万次阅读 多人点赞 2019-07-09 22:03:48
    阀值分割方法的优缺点: 计算简单,效率较高; 只考虑像素点灰度值本身的特征,一般不考虑空间特征,因此对噪声比较敏感,鲁棒性不高。 从前面的介绍里我们可以看出,阈值分割方法的最关键就在于阈值的选择。...
  • 前端面试题

    万次阅读 多人点赞 2019-08-08 11:49:01
    iframe的优缺点? 75 请你谈谈Cookie的弊端? 75 js延迟加载的方式有哪些? 76 documen.write和 innerHTML 的区别? 76 哪些操作会造成内存泄漏? 76 判断一个字符串中出现次数最多的字符,统计这个次数 ...
  • SpringBoot与Springcloud优缺点

    千次阅读 2019-08-06 15:31:07
    3、熔断组件往往会提供一系列的监控,如:服务可用与否、熔断器是否被打开、目前的吞吐量、网络延迟状态的监控等,从而可以让开发人员和运维人员的了解服务的状况。 Eureka基础架构: 1>、服务注册中心:Eureka...
  • 机器学习常见算法优缺点汇总

    千次阅读 2018-05-20 18:50:03
    深度学习算法是对人工神经网络的发展。 在近期赢得了很多关注, 特别是百度也开始发力深度学习后, 更是在国内引起了很多关注。 在计算能力变得日益廉价的今天,深度学习试图建立大得多也复杂得多的神经网络。很多...
  • 函数式编程与面向对象编程的优劣

    千次阅读 2018-10-28 20:44:44
    工程中不在只是面向对象编程,更多的人尝试着开始使用函数式编程来解决软件工程中遇到的问题。 什么是函数式编程?在维基百科中给出了详细的定义,函数式编程(英语:functional programming)或称函数程序设计,又...
  • 几种编程语言的优缺点

    千次阅读 2017-01-22 09:57:15
    其他的 Lisp 已经发展成了很大,很复杂(很好很强大? 译者:-)的编程环境,就像 C++ 和 Java,要有很多库啊,工具啊等等之类。那些,你不需要知道。但是你应该能用 Scheme 写程序。如果你能够做出 The Little Schemer...
  • xml和Json的优缺点

    千次阅读 2017-09-27 19:01:49
    .XML的缺点  A.XML文件庞大,文件格式复杂,传输占带宽;  B.服务器端和客户端都需要花费大量代码来解析XML,导致服务器端和客户端代码变得异常复杂且不易维护;  C.客户端不同浏览器之间解析XML的方式不一致...
  • angular react vue优缺点对比

    千次阅读 2018-04-27 10:06:31
    今天分享的内容是前端3大框架,主要有介绍前端的发展历程,框架出现的原因和介绍angular、react和vue各自的优缺点,让大家能够对这3个框架有一个大致的了解。 首先介绍一下前端技术的发展 1994年可以看作是前端...
  • 初探AR技术

    千次阅读 多人点赞 2019-10-06 15:36:58
    初探AR技术AR概述概念定义:技术手段:参考实例:AR解决方案AR SDKARKit简介扩展ARCore简介ARCore 的工作原理优缺点Vuforia简介优缺点Wikitude简介EasyAR简介优缺点Web AR总结本文参考 AR概述 概念定义:   增强...
  • [Java基础]-- Java GC 垃圾回收器的分类和优缺点

    万次阅读 多人点赞 2018-05-03 11:28:28
    关于Java的垃圾回收器,一直是个头疼的问题,这里简要说明下分类和优缺点,供选择使用。 一、JVM GC 垃圾回收器类型 JVM的垃圾回收器大致分为六种类型: 1、串行:垃圾回收器 (Serial Garbage Collector) (1)...
  • WebService的优缺点

    万次阅读 2016-08-19 18:50:24
    “软件就是服务”,这已经是软件发展的一个潮流了。未来的软件厂商就像现在的电信公司一样,用户可以按照时间来租用软件公司的服务。”Web服务”可以说是整个.NET计划的核心,简单的说,Web服务就是一种远程访问的...
  • BP神经网络的优缺点介绍

    万次阅读 多人点赞 2017-04-10 14:23:33
    人工神经网络(Artificial Neural Network)又称连接机模型,是在现代神经学、生物学、心理学等学科研究的基础上产生的,它反映了生物神经系统处理外界事物的基本过程,是在模拟人脑神经组织的基础上发展起来的计算...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 23,289
精华内容 9,315
关键字:

发展对象目前的优缺点