精华内容
下载资源
问答
  • 主主流流PHP框框架架的的优优缺缺点点对对比比分分析析 这篇文章主要介绍了几款今年比较热门的主流PHP框架的优缺点对比分析非常的简单实用有需要的小伙伴参考 PHP是一种在国内外都比较流行的开源服务器端脚本开发...
  • 一直以来,phper讨论最多的就是php各种框架的优缺点,网上的资料也是比较零散,现把几款主流的框架收集汇总一下,其中本人只是用过Yii2、Laravel、Yaf、Thinkphp这四种框架,因此大部分对各种框架的评价皆来自与网上...

    一直以来,phper讨论最多的就是php各种框架的优缺点,网上的资料也是比较零散,现把几款主流的框架收集汇总一下,其中本人只是用过Yii2、Laravel、Yaf、Thinkphp这四种框架,因此大部分对各种框架的评价皆来自与网上资料,如果问题,请在评论中指出,共同进步

    一、ThinkPHP

    ThinkPHP(FCS)是一个轻量级的中型框架,是从Java的Struts结构移植过来的中文PHP开发框架。它使用面向对象的开发结构和MVC模式,并且模拟实现了Struts的标签库,各方面都比较人性化,熟悉J2EE的开发人员相对比较容易上手,适合php框架初学者。 ThinkPHP的宗旨是简化开发、提高效率、易于扩展,其在对数据库的支持方面已经包括MySQL、MSSQL、Sqlite、PgSQL、 Oracle,以及PDO的支持。ThinkPHP有着丰富的文档和示例,框架的兼容性较强,但是其功能有限,因此更适合用于中小项目的开发。

    优点

    1.借助成熟的Java思想
    2.易于上手,有丰富的中文文档;学习成本低,社区活跃度高
    3.框架的兼容性较强,PHP4和PHP5完全兼容、完全支持UTF8等。
    4.适合用于中小项目的开发
    5.从thinkphp3.2.2引入composer包管理工具

    缺点

    1.对Ajax的支持不是很好;
    2.目录结构混乱,相比其他框架目录结构要差一点;
    3.上手容易,但是深入学习较难。


    二、Yii

    Yii 是一个基于组件的高性能php框架,用于开发大型Web应用。Yii采用严格的OOP编写,并有着完善的库引用以及全面的教程。从 MVC,DAO/ActiveRecord,widgets,caching,等级式RBAC,Web服务,到主题化,I18N和L10N,Yii提供了 今日Web 2.0应用开发所需要的几乎一切功能。事实上,Yii是最有效率的PHP框架之一。

    优点

    1.纯OOP
    2.用于大规模Web应用
    3.模型使用方便
    4.开发速度快,运行速度也快。性能优异且功能丰富
    5.使用命令行工具。
    6.支持composer包管理工具

    缺点:

    1.对Model层的指导和考虑较少
    2.文档实例较少
    3.英文太多
    4.要求PHP技术精通,OOP编程要熟练!
    5.View并不是理想view,理想中的view可能只是html代码,不会涉及PHP代码。

    三、laravel

    优点
    1.laravel的设计思想是很先进的,非常适合应用各种开发模式TDD, DDD 和BDD
    2.支持composer包管理工具
    3.集合了php 比较新的特性,以及各种各样的设计模式,Ioc 容器,依赖注入、门面、契约。测试功能等。


    缺点
    1.基于组件式的框架,所以比较臃肿

    四、CodeIgniter

    优点:

    1.Code Igniter推崇“简单就是美”这一原则。没有花哨的设计模式、没有华丽的对象结构,一切都是那么简单。几行代码就能开始运行,再加几 行代码就可以进行输出。可谓是“大道至简”的典范。 
    2.配置简单,全部的配置使用PHP脚本来配置,执行效率高;
    3.具有基本的路由功能,能够进行一定程度的路由;
    4.具有初步的Layout功能,能够制作一定程度的界面外观;
    5.数据库层封装的不错,具有基本的MVC功能. 
    6.快速简洁,代码不多,执行性能高,
    7.框架简单,容易上手,学习成本低,文档详细;
    8.自带了很多简单好用的library,框架适合小型应用.

    缺点:

    1.本身的实现不太理想。
    2.内部结构过于混乱,虽然简单易用,但缺乏扩展能力。
    3.把Model层简单的理解为数据库操作. 
    4.框架略显简单,只能够满足小型应用,略微不太能够满足中型应用需要.

    评价:
    总体来说,拿CodeIgniter来完成简单快速的应用还是值得,同时能够构造一定程度的layout,便于模板的复用,数据操作层来说封装的不 错,并且CodeIgniter没有使用很多太复杂的设计模式,执行性能和代码可读性上都不错。至于附加的library 也还不错,简洁高效。


    五、Zend Framework

    优点:

    1.大量应用了PHP5中面向对象的新特征:接口、异常、抽象类、SPL等等。这些东西的应用让Zend Framework具有高度的模块化和灵活性
    2.严格遵循“针对接口编程”和“单一对象职责”等原则
    3.官方出品,自带了非常多的library,框架本身使用了很多设计模式来编写,架构上很优雅,执行效率中等
    4.MVC设计,比较简洁
    5.具有路由功能,配置文件比较强大(能够处理XML和php INI)
    6.能够直观的支持除数据库操作之外的Model层(比 CodeIgniter 和 CakePHP 强),并且能够很轻易的使用Loader功能加载其他新增加的Class
    7.Cache功能很强大,从前端Cache到后端Cache都支持,后端Cache支持Memcache、APC、SQLite、文件等等方式
    8.数据库操作功能很强大,支持各种驱动(适配器)
    9.文档很全,在国内社区很成熟

    缺点:

    1.MVC功能完成比较弱,View层简单实现(跟没实现一样),无法很强大的控制前端页面.
    2.没有自动化脚本,创建一个应用,包括入口文件,全部必须自己手工构建,入门成本高
    3.对于简单和小型的项目来说,反而因为在框架中应用了大量面向对象设计,对开发者提出了更高的要求,间接增加了项目的开发成本

    评价:
    作为官方出品的框架,Zend Framework的野心是可以预见的,想把其他框架挤走,同时封装很多强大的类库,能够提供一站式的框架服务,并且他们的开发团队很强大,完全足够有能力开发很强大的产品出来,所以基本可以确定的是Zend Framework前途无量,如果花费更多的时间去完善框架。同样的,Zend Framework架构本身也是比较优雅的,说明Zend官方是有很多高手的,设计理念上比较先进,虽然有一些功能实现的不够完善,比如View层,自动化脚本等等,这些都有赖于未来的升级


    六、CakePHP

    优点:

    1.最类似于RoR的框架,包括设计方式,数据库操作的Active Record方式
    2.设计层面很优雅,没有自带多余的 library,所有的功能都是纯粹的框架,执行效率还不错
    3.数据库层的 hasOne, hasMany功能很强大,对于复杂业务处理比较合适
    4.路由功能,配置功能难度适中
    5.自动构建脚手架(scaffold)很强大,适合中型应用
    6.基本实现过了MVC每一层
    7.具有自动操作命令行脚本功能
    8.文档比较全,学习成本中等

    缺点:

    1.CakePHP非常严重的问题是把Model理解为数据库层操作,严重影响了除了数据库之外的操作能力
    2.cache功能略显薄弱
    3.配置功能稍嫌弱
    4.不适合大型应用,只适合中型应用,小型应用来说略微的学习成本高了点.

    评价:
    总体来说CakePHP框架代表了PHP框架很重要的一个时代和代表,并且目前发挥着很重要的作用,不少自己写的框架都模仿了CakePHP的方式,是个里程碑式的产品;CakePHP透露着RoR的敏捷开发方式和把数据库操作认为是唯一Model的设计思想,作为开发快速应用和原型是绝好的工具;同样,用来做Web2.0网站的开发框架,也是值得选择的


    七、Symfony

    优点:

    1.完整实现了MVC三层
    2.封装了所有东西,包括 $POST,$GET 数据,异常处理,调试功能,数据检测
    3.包含强大的缓存功能
    4.自动加载Class,能够很随意的定义各种自己的class
    5.强大的语言支持
    6.具有很强大的view层操作,能够零碎的包含单个多个文件
    7.非常强大的配置功能,使用xml配置能够控制所有框架和程序运行行为
    8.包含强大的多层级项目和应用管理:Project --> Application --> Module --> Action,能够满足一个项目下多个应用的需要,并且每层可以定义自己的类库,配置文件,layout
    9.非常强大的命令行操作功能,包括建立项目、建立应用、建立模块、刷新缓存等等
    10.Symfony绝对是开发大型复杂项目的首选,因为使用了Symfony,将大大节约开发成本,并且多人协作的时候,不会出现问题,在Project级别定义好基础Class以后,任何模块都能够重用,大大复用代码.

    缺点:

    1.最大的问题也在于使用了太多风格迥异的开源项目来组合成框架
    2.由于Mojavi和Propel本身都相当复杂,因此Symfony的结构非常复杂,难以理解和学习
    3. 缓存功能无法控制,每次开发调试总是缓存,需要执行 symfony cc,symfony rc来清除和重建缓存
    4.效率不是很高,特别是解析模板和读取配置文件的过程,花费时间不少
    5.学习成本很高,并且国内没有成熟的社区和中文文档

    评价:
    Symfony绝对是企业级的框架,唯一能够貌似能够跟Java领域哪些强悍框架抗衡的东西;强悍的东西,自然学习复杂,但是相应的对项目开发也比较有帮助,自然是推荐复杂的项目使用Symfony来处理,觉得是值得,后期的维护成本比较低,复用性很强。相应的如果使用Symfony的应该都是比较复杂的互联网项目,那么相应的就要考虑关于数据库分布的问题,那么就需要抛弃Symfony自带的数据库操作层,需要自己定义,当然了,Symfony支持随意的构造model层


    总评:
    以上数款框架,各有特色,而且都是开源项目,不过框架针对的项目不一样,一般来说:

    1.小型项目:CodeIngiter

    2.中型项目:CakePHP、Zend Framework、Laravel、Thinkphp

    3.大型重量级项目:Yii、Symfony、Laravel


    以上划分也不绝对,在项目选型的时候,要充分考虑框架的可以定制性、扩展性,因为每个项目都无法确定你是否会随着需求的变化进行改变

     

    --------------------------------------------------------------------------------------------------------------------------------------

    主要区别:(thinkPHP更适合国人的编码习惯)

    1.渲染模版方式的不同:

    Laravel框架里,使用return view()来渲染模版;

    ThinkPHP里则使用了$this->display()的方式渲染模版;

    2.在Laravel框架里,由于其考虑到了跨站请求伪造, 所以如果使用form表单以post方式进行传值时,如果不再form表单中加入{{csrf_field()}}则会报出TokenMethodnotfound的语法错误;

    TP框架则需要自己手动完成防止跨站攻击的代码;

    3.Laravel是一个重路由的框架(5.4),所有的功能都是由路由发起的,哪怕没有控制器方法,只要写了路由就能够访问,thinkPHP(3.2),必须要有控制器方法才能正常访问;

    4.laravel具有强大的社区化扩展,(composer扩展自动加载);

    5.laravel具有强大的Blade模版引擎;

    6.中间件,Laravel特点,可以实现访问前后的处理,例如请求和返回,权限认证等;

    7.条件判断语句书写方式的差异:

    Laravel框架里 if else判断语句和foreach语句 书写时必须以@if开头  以@endif结尾,如果没有则报语法错误,@foreach @endforeach同理;

    TP框架则和PHP语法规则使用方式一致直接ifesle语句判断和foreach循环遍历

        

    Laravel里内置了大量的方法供开发者使用,在实际应用中更接近于"让对象完成一切"的开发思想,比如在后台表单验证的时候,Laravel内置了大量的验证方法,例如对用户名的验证:我们使用可以validate方法里'username'=>'required'(不能为空)|alpha_dash(必须数字字母下划线)|between:6,18(在多少位数之间);还内置了例如email;same:字段名;diff:字段名等大量的方法极大的提高了开发速度;

        加密方式 在TP框架中 我们对用户名密码进行加密时使用md5();的方式进行加密,但md5的缺点在于其可以逆向破解,而且在同等规则下同样的密码md5加密出的字符串是有可能出现相同的,这就降低其安全性;

    但在Laravel框架中内置了"哈希"Hash加密单向加密方法,且同样的参数加密出的字符串是绝对不会出现相同的情况 这就提高了安全性;

        在实际开发中我们常常遇到这样的问题,就是开发地点不固定,这就造成了我们需要频繁的更改数据库配置,给开发工作造成了麻烦,TP依然没有避免这个"灾难";在laravel框架中,.env环境文件的出现解决了这个麻烦,我们只需要在不同的工作地点配置好.env文件就不必再进行配置,因为无论是git还是svn " .env是不会随着文件一起提交到服务器的";
     

    -------------------------------------------------关于TDD、BDD和DDD的一些看法-------------------------------------------

    在实际的项目中,我们可能随时面对各种不同的需求,它的各个方面的要素决定了我们所采用的开发模式。

    比如,它的复杂度如何?所有的需求是否足够清晰?开发人员对相关的业务是否足够了解?项目的工期是否合理?种种问题,不一而足。这也决定了我们可能面对不同的需求可能需要采用不同的开发模式。下面大概说几种。

     

    1. TDD

    TDD指的是Test Drive Development,很明显的意思是测试驱动开发,也就是说我们可以从测试的角度来检验整个项目。大概的流程是先针对每个功能点抽象出接口代码,然后编写单元测试代码,接下来实现接口,运行单元测试代码,循环此过程,直到整个单元测试都通过。这一点和敏捷开发有类似之处。

    TDD的好处自然不用多说,它能让你减少程序逻辑方面的错误,尽可能的减少项目中的bug,开始接触编程的时候我们大都有过这样的体验,可能你觉得完成得很完美,自我感觉良好,但是实际测试或者应用的时候才发现里面可能存在一堆bug,或者存在设计问题,或者更严重的逻辑问题,而TDD正好可以帮助我们尽量减少类似事件的发生。而且现在大行其道的一些模式对TDD的支持都非常不错,比如MVC和MVP等。

    但是并不是所有的项目都适合TDD这种模式的,我觉得必须具备以下几个条件。

    首先,项目的需求必须足够清晰,而且程序员对整个需求有足够的了解,如果这个条件不满足,那么执行的过程中难免失控。当然,要达到这个目标也是需要做一定功课的,这要求我们前期的需求分析以及HLD和LLD都要做得足够的细致和完善。

    其次,取决于项目的复杂度和依赖性,对于一个业务模型及其复杂、内部模块之间的相互依赖性非常强的项目,采用TDD反而会得不尝失,这会导致程序员在拆分接口和写测试代码的时候工作量非常大。另外,由于模块之间的依赖性太强,我们在写测试代码的时候可能不采取一些桥接模式来实现,这样势必加大了程序员的工作量。

     2. BDD

    BDD指的是Behavior Drive Development,也就是行为驱动开发。这里的B并非指的是Business,实际上BDD可以看作是对TDD的一种补充,当然你也可以把它看作TDD的一个分支。因为在TDD中,我们并不能完全保证根据设计所编写的测试就是用户所期望的功能。BDD将这一部分简单和自然化,用自然语言来描述,让开发、测试、BA以及客户都能在这个基础上达成一致。因为测试优先的概念并不是每个人都能接受的,可能有人觉得系统太复杂而难以测试,有人认为不存在的东西无法测试。所以,我们在这里试图转换一种观念,那便是考虑它的行为,也就是说它应该如何运行,然后抽象出能达成共识的规范。如果你用过JBehave之类的BDD框架,你将会更好的理解其中具体的流程。这里我推荐一篇具体阐述的文章。亲身体验行为驱动开发

    另外,关于TDD和BDD之间的关系,还可以参考这篇文章: 虚拟座谈会:代码测试比率、测试驱动开发及行为驱动开发

     3. DDD

    DDD指的是Domain Drive Design,也就是领域驱动开发。这是一种非常好的思想,在我们刚开始学习程序,甚至刚开始学习三层架构的时候,我们曾经面临过很多疑惑,比如如何来实现我们的数据层?后来我们开始学习MVC,MVP等架构,如何设计Model层又成了我们的新问题。我们见过太多这种情况,Model变成了单纯的数据容器,也就是我们经常说的贫血模式。DDD实际上也是建立在这个基础之上,因为它关注的是Service层的设计,着重于业务的实现,因此不可避免的以贫血模式为基础而存在。但是它最大的特别是将分析和设计结合起来,不再使他们处于分裂的状态,这对于我们正确完整的实现客户的需求,以及建立一个具有业务伸缩性的模型,是有很大帮助的。

     

     

     

    展开全文
  • SSH框架缺点

    2014-03-01 13:25:00
    SSH框架缺点开源是3个框架共有的优点Struts2框架(MVC框架)的优点如下: 1) 实现了MVC模式,层次结构清晰,使程序员只需关注业务逻辑的实现; 2) 丰富的标签库,大大提高了开发的效率;3) Struts2提供丰富的...

    SSH框架优缺点

    开源是3个框架共有的优点

     

    Struts2框架(MVC框架)的优点如下:

            1)  实现了MVC模式,层次结构清晰,使程序员只需关注业务逻辑的实现;

            2)  丰富的标签库,大大提高了开发的效率;

            3) Struts2提供丰富的拦截器实现

            3) 通过配置文件,就可以掌握整个系统各个部分之间的关系;

            4) 异常处理机制,只需在配置文件中配置异常的映射,即可对异常做相应的处理;

    Spring框架的优点如下:

            1) 无入侵性(在业务逻辑代码中感觉不到Spring框架的存在);

            2) 各个组件之间的耦合极为松散;

            3) 无需程序员自己实现singleton模式;

            4) 通过AOP,可以实现事务管理和日志管理;

            5) 整合其他的框架,如:struts框架和hibernate框架;

    Hibernate框架(ORM框架)的优点如下:

            1) 对象/关系数据库映射(ORM),  使用时只需操纵对象,使开发更加面向对象化;

            2) 无入侵性;

            3) 简洁的HQL语句,减少了JDBC与SQL操作数据库的代码量;

            4) 移植性好;

            缺点如下:

            1) 对批量更新,删除的支持不好;

    什么是SSH2框架。好处在哪里? 

     SSH2框架:

    具体来说应该是:struts2.0+spring3.2+hirbnate2.5
    典型的J2EE三层结构,分为表现层、中间层(业务逻辑层)和数据服务层。三层体系将业务规则、数据访问及合法性校验等工作放在中间层处理。客户端不直接与数据库交互,而是通过组件与中间层建立连接,再由中间层与数据库交互。 

    表现层是传统的JSP技术,自1999年问世以来,经过多年的发展,其广泛的应用和稳定的表现,为其作为表现层技术打下了坚实的基础。 

    中间层采用的是流行的Spring+Hibernate,为了将控制层与业务逻辑层分离,又细分为以下几种。 

    Web层,就是MVC模式里面的“C”(controller),负责控制业务逻辑层与表现层的交互,调用业务逻辑层,并将业务数据返回给表现层作组织表现,该系统的MVC框架采用Struts。 

    Service层(就是业务逻辑层),负责实现业务逻辑。业务逻辑层以DAO层为基础,通过对DAO组件的正面模式包装,完成系统所要求的业务逻辑。 

    DAO层,负责与持久化对象交互。该层封装了数据的增、删、查、改的操作。 

    PO,持久化对象。通过实体关系映射工具将关系型数据库的数据映射成对象,很方便地实现以面向对象方式操作数据库,该系统采用Hibernate作为ORM框架。 

    Spring的作用贯穿了整个中间层,将Web层、Service层、DAO层及PO无缝整合,其数据服务层用来存放数据。 

    一个良好的框架可以让开发人员减轻重新建立解决复杂问题方案的负担和精力;它可以被扩展以进行内部的定制化;并且有强大的用户社区来支持它。框架通常能很好的解决一个问题。然而,你的应用是分层的,可能每一个层都需要各自的框架。仅仅解决UI问题并不意味着你能够很好的将业务逻辑和持久性逻辑和UI 组件很好的耦合。 



    不可否认,对于简单的应用,采用ASP或者PHP的开发效率比采用J2EE框架的开发效率要高。甚至有人会觉得:这种分层的结构,比一般采用JSP + Servlet的系统开发效率还要低。 

    笔者从一下几个角度来阐述这个问题。 

    — 开发效率:软件工程是个特殊的行业,不同于传统的工业,例如电器、建筑及汽车等行业。这些行业的产品一旦开发出来,交付用户使用后将很少需要后续的维护。但软件行业不同,软件产品的后期运行维护是个巨大的工程,单纯从前期开发时间上考虑其开发效率是不理智的,也是不公平的。众所周知,对于传统的ASP和 PHP等脚本站点技术,将整个站点的业务逻辑和表现逻辑都混杂在ASP或PHP页面里,从而导致页面的可读性相当差,可维护性非常低。即使需要简单改变页面的按钮,也不得不打开页面文件,冒着破坏系统的风险。但采用严格分层J2EE架构,则可完全避免这个问题。对表现层的修改即使发生错误,也绝对不会将错误扩展到业务逻辑层,更不会影响持久层。因此,采用J2EE分层架构,即使前期的开发效率稍微低一点,但也是值得的。 

    — 需求的变更:以笔者多年的开发经验来看,很少有软件产品的需求从一开始就完全是固定的。客户对软件需求,是随着软件开发过程的深入,不断明晰起来的。因此,常常遇到软件开发到一定程度时,由于客户对软件需求发生了变化,使得软件的实现不得不随之改变。当软件实现需要改变时,是否可以尽可能多地保留软件的部分,尽可能少地改变软件的实现,从而满足客户需求的变更?答案是——采用优秀的解耦架构。这种架构就是J2EE的分层架构,在优秀的分层架构里,控制层依赖于业务逻辑层,但绝不与任何具体的业务逻辑组件耦合,只与接口耦合;同样,业务逻辑层依赖于DAO层,也不会与任何具体的DAO组件耦合,而是面向接口编程。采用这种方式的软件实现,即使软件的部分发生改变,其他部分也尽可能不要改变。 

    注意:即使在传统的硬件行业,也有大量的接口规范。例如PCI接口、显卡或者网卡,只要其遵守PCI的规范,就可以插入主板,与主板通信。至于这块卡内部的实现,不是主板所关心的,这也正是面向接口编程的好处。假如需要提高电脑的性能,需要更新显卡,只要更换另一块PCI接口的显卡,而不是将整台电脑抛弃。如果一台电脑不是采用各种接口组合在一起,而是做成整块,那将意味着即使只需要更新网卡,也要放弃整台电脑。同样,对于软件中的一个个组件,当一个组件需要重构时,尽量不会影响到其他组件。实际上,这是最理想的情况,即使采用目前最优秀的架构,也会有或多或少的影响,这也是软件工程需要努力提高的地方。 

    技术的更新,系统重构:软件行业的技术更新很快,虽然软件行业的发展不快,但小范围的技术更新特别快。一旦由于客观环境的变化,不得不更换技术时,如何保证系统的改变最小呢?答案还是选择优秀的架构。 

    在传统的Model 1的程序结构中,只要有一点小的需求发生改变,将意味着放弃整个页面。或者改写。虽然前期的开发速度快,除非可以保证以后永远不会改变应用的结构,否则不要采用Model 1的结构。 

    采用Hibernate作为持久层技术的最大的好处在于:可以完全以面向对象的方式进行系统分析、系统设计。 

    DAO模式需要为每个DAO组件编写DAO接口,同时至少提供一个实现类,根据不同需要,可能有多个实现类。用Spring容器代替DAO工厂 

    通常情况下,引入接口就不可避免需要引入工厂来负责DAO组件的生成。Spring实现了两种基本模式:单态模式和工厂模式。而使用Spring可以完全避免使用工厂模式,因为Spring就是个功能非常强大的工厂。因此,完全可以让Spring充当DAO工厂。 

    由Spring充当DAO工厂时,无须程序员自己实现工厂模式,只需要将DAO组件配置在Spring容器中,由ApplicationContext负责管理DAO组件的创建即可。借助于Spring提供的依赖注入,其他组件甚至不用访问工厂,一样可以直接使用DAO实例。 

    优点: 
    Struts跟Tomcat、Turbine等诸多Apache项目一样,是开源软件,这是它的一大优点。使开发者能更深入的了解其内部实现机制。 
    除此之外,Struts的优点主要集中体现在两个方面:Taglib和页面导航。Taglib是Struts的标记库,灵活动用,能大大提高开发效率。另外,就目前国内的JSP开发者而言,除了使用JSP自带的常用标记外,很少开发自己的标记,或许Struts是一个很好的起点。 
    关于页面导航,我认为那将是今后的一个发展方向,事实上,这样做,使系统的脉络更加清晰。通过一个配置文件,即可把握整个系统各部分之间的联系,这对于后期的维护有着莫大的好处。尤其是当另一批开发者接手这个项目时,这种优势体现得更加明显。 
    缺点: 
    Taglib是Struts的一大优势,但对于初学者而言,却需要一个持续学习的过程,甚至还会打乱你网页编写的习惯,但是,当你习惯了它时,你会觉得它真的很棒。 
    Struts将MVC的Controller一分为三,在获得结构更加清晰的同时,也增加了系统的复杂度。 
    Struts从产生到现在还不到半年,但已逐步越来越多运用于商业软件。虽然它现在还有不少缺点,但它是一种非常优秀的J2EE MVC实现方式,如果你的系统准备采用J2EE MVC架构,那么,不妨考虑一下Struts。

    SSH2相比SSH1的不同就是前者使用了更方便、更安全的MVC框架Struts2.。。

    SSH2的主要内容包括:Struts2、Hibernate、Spring

    Struts2是优秀的MVC框架。。。

    Hibernate是现在最好用的ORM框架。。。

    Spring是现在使用最普遍的Ioc容器。。。用来处理业务逻辑

    转载于:https://www.cnblogs.com/wuxiang/p/3574980.html

    展开全文
  • php 各种框架缺点

    万次阅读 2018-05-08 15:22:54
    一直以来,phper讨论最多的就是php各种框架的优缺点,网上的资料也是比较零散,现把几款主流的框架收集汇总一下,其中本人只是用过Yii2、Laravel、Yaf、Thinkphp这四种框架,因此大部分对各种框架的评价皆来自与网上...

    一直以来,phper讨论最多的就是php各种框架的优缺点,网上的资料也是比较零散,现把几款主流的框架收集汇总一下,其中本人只是用过Yii2、Laravel、Yaf、Thinkphp这四种框架,因此大部分对各种框架的评价皆来自与网上资料,如果问题,请在评论中指出,共同进步


    一、ThinkPHP

    ThinkPHP(FCS)是一个轻量级的中型框架,是从Java的Struts结构移植过来的中文PHP开发框架。它使用面向对象的开发结构和MVC模式,并且模拟实现了Struts的标签库,各方面都比较人性化,熟悉J2EE的开发人员相对比较容易上手,适合php框架初学者。 ThinkPHP的宗旨是简化开发、提高效率、易于扩展,其在对数据库的支持方面已经包括MySQL、MSSQL、Sqlite、PgSQL、 Oracle,以及PDO的支持。ThinkPHP有着丰富的文档和示例,框架的兼容性较强,但是其功能有限,因此更适合用于中小项目的开发。

    优点

    1.借助成熟的Java思想

    2.易于上手,有丰富的中文文档;学习成本低,社区活跃度高

    3.框架的兼容性较强,PHP4和PHP5完全兼容、完全支持UTF8等。

    4.适合用于中小项目的开发

    5.从thinkphp3.2.2引入composer包管理工具

    缺点

    1.对Ajax的支持不是很好;

    2.目录结构混乱,相比其他框架目录结构要差一点;

    3.上手容易,但是深入学习较难。


    二、Yii

    Yii 是一个基于组件的高性能php框架,用于开发大型Web应用。Yii采用严格的OOP编写,并有着完善的库引用以及全面的教程。从 MVC,DAO/ActiveRecord,widgets,caching,等级式RBAC,Web服务,到主题化,I18N和L10N,Yii提供了 今日Web 2.0应用开发所需要的几乎一切功能。事实上,Yii是最有效率的PHP框架之一。

    优点

    1.纯OOP

    2.用于大规模Web应用

    3.模型使用方便

    4.开发速度快,运行速度也快。性能优异且功能丰富

    5.使用命令行工具。

    6.支持composer包管理工具

    缺点:

    1.对Model层的指导和考虑较少

    2.文档实例较少

    3.英文太多

    4.要求PHP技术精通,OOP编程要熟练!

    5.View并不是理想view,理想中的view可能只是html代码,不会涉及PHP代码。


    三、laravel

    优点
    1.laravel的设计思想是很先进的,非常适合应用各种开发模式TDD, DDD 和BDD

    2.支持composer包管理工具

    3.集合了php 比较新的特性,以及各种各样的设计模式,Ioc 容器,依赖注入等。

    缺点
    1.基于组件式的框架,所以比较臃肿


    四、CodeIgniter

    优点:

    1.Code Igniter推崇“简单就是美”这一原则。没有花哨的设计模式、没有华丽的对象结构,一切都是那么简单。几行代码就能开始运行,再加几 行代码就可以进行输出。可谓是“大道至简”的典范。 

    2.配置简单,全部的配置使用PHP脚本来配置,执行效率高;

    3.具有基本的路由功能,能够进行一定程度的路由;

    4.具有初步的Layout功能,能够制作一定程度的界面外观;

    5.数据库层封装的不错,具有基本的MVC功能. 

    6.快速简洁,代码不多,执行性能高,

    7.框架简单,容易上手,学习成本低,文档详细;

    8.自带了很多简单好用的library,框架适合小型应用.

    缺点:

    1.本身的实现不太理想。

    2.内部结构过于混乱,虽然简单易用,但缺乏扩展能力。

    3.把Model层简单的理解为数据库操作. 

    4.框架略显简单,只能够满足小型应用,略微不太能够满足中型应用需要.

    评价:

    总体来说,拿CodeIgniter来完成简单快速的应用还是值得,同时能够构造一定程度的layout,便于模板的复用,数据操作层来说封装的不 错,并且CodeIgniter没有使用很多太复杂的设计模式,执行性能和代码可读性上都不错。至于附加的library 也还不错,简洁高效。


    五、Zend Framework

    优点:

    1.大量应用了PHP5中面向对象的新特征:接口、异常、抽象类、SPL等等。这些东西的应用让Zend Framework具有高度的模块化和灵活性

    2.严格遵循“针对接口编程”和“单一对象职责”等原则

    3.官方出品,自带了非常多的library,框架本身使用了很多设计模式来编写,架构上很优雅,执行效率中等

    4.MVC设计,比较简洁

    5.具有路由功能,配置文件比较强大(能够处理XML和php INI)

    6.能够直观的支持除数据库操作之外的Model层(比 CodeIgniter 和 CakePHP 强),并且能够很轻易的使用Loader功能加载其他新增加的Class

    7.Cache功能很强大,从前端Cache到后端Cache都支持,后端Cache支持Memcache、APC、SQLite、文件等等方式

    8.数据库操作功能很强大,支持各种驱动(适配器)

    9.文档很全,在国内社区很成熟

    缺点:

    1.MVC功能完成比较弱,View层简单实现(跟没实现一样),无法很强大的控制前端页面.

    2.没有自动化脚本,创建一个应用,包括入口文件,全部必须自己手工构建,入门成本高

    3.对于简单和小型的项目来说,反而因为在框架中应用了大量面向对象设计,对开发者提出了更高的要求,间接增加了项目的开发成本

    评价:
    作为官方出品的框架,Zend Framework的野心是可以预见的,想把其他框架挤走,同时封装很多强大的类库,能够提供一站式的框架服务,并且他们的开发团队很强大,完全足够有能力开发很强大的产品出来,所以基本可以确定的是Zend Framework前途无量,如果花费更多的时间去完善框架。同样的,Zend Framework架构本身也是比较优雅的,说明Zend官方是有很多高手的,设计理念上比较先进,虽然有一些功能实现的不够完善,比如View层,自动化脚本等等,这些都有赖于未来的升级


    六、CakePHP

    优点:

    1.最类似于RoR的框架,包括设计方式,数据库操作的Active Record方式

    2.设计层面很优雅,没有自带多余的 library,所有的功能都是纯粹的框架,执行效率还不错

    3.数据库层的 hasOne, hasMany功能很强大,对于复杂业务处理比较合适

    4.路由功能,配置功能难度适中

    5.自动构建脚手架(scaffold)很强大,适合中型应用

    6.基本实现过了MVC每一层

    7.具有自动操作命令行脚本功能

    8.文档比较全,学习成本中等

    缺点:

    1.CakePHP非常严重的问题是把Model理解为数据库层操作,严重影响了除了数据库之外的操作能力

    2.cache功能略显薄弱

    3.配置功能稍嫌弱

    4.不适合大型应用,只适合中型应用,小型应用来说略微的学习成本高了点.

    评价:
    总体来说CakePHP框架代表了PHP框架很重要的一个时代和代表,并且目前发挥着很重要的作用,不少自己写的框架都模仿了CakePHP的方式,是个里程碑式的产品;CakePHP透露着RoR的敏捷开发方式和把数据库操作认为是唯一Model的设计思想,作为开发快速应用和原型是绝好的工具;同样,用来做Web2.0网站的开发框架,也是值得选择的


    七、Symfony

    优点:

    1.完整实现了MVC三层

    2.封装了所有东西,包括 $POST,$GET 数据,异常处理,调试功能,数据检测

    3.包含强大的缓存功能

    4.自动加载Class,能够很随意的定义各种自己的class

    5.强大的语言支持

    6.具有很强大的view层操作,能够零碎的包含单个多个文件

    7.非常强大的配置功能,使用xml配置能够控制所有框架和程序运行行为

    8.包含强大的多层级项目和应用管理:Project --> Application --> Module --> Action,能够满足一个项目下多个应用的需要,并且每层可以定义自己的类库,配置文件,layout

    9.非常强大的命令行操作功能,包括建立项目、建立应用、建立模块、刷新缓存等等

    10.Symfony绝对是开发大型复杂项目的首选,因为使用了Symfony,将大大节约开发成本,并且多人协作的时候,不会出现问题,在Project级别定义好基础Class以后,任何模块都能够重用,大大复用代码.

    缺点:

    1.最大的问题也在于使用了太多风格迥异的开源项目来组合成框架

    2.由于Mojavi和Propel本身都相当复杂,因此Symfony的结构非常复杂,难以理解和学习

    3. 缓存功能无法控制,每次开发调试总是缓存,需要执行 symfony cc,symfony rc来清除和重建缓存

    4.效率不是很高,特别是解析模板和读取配置文件的过程,花费时间不少

    5.学习成本很高,并且国内没有成熟的社区和中文文档

    评价:
    Symfony绝对是企业级的框架,唯一能够貌似能够跟Java领域哪些强悍框架抗衡的东西;强悍的东西,自然学习复杂,但是相应的对项目开发也比较有帮助,自然是推荐复杂的项目使用Symfony来处理,觉得是值得,后期的维护成本比较低,复用性很强。相应的如果使用Symfony的应该都是比较复杂的互联网项目,那么相应的就要考虑关于数据库分布的问题,那么就需要抛弃Symfony自带的数据库操作层,需要自己定义,当然了,Symfony支持随意的构造model层


    总评:
    以上数款框架,各有特色,而且都是开源项目,不过框架针对的项目不一样,一般来说:

    1.小型项目:CodeIngiter

    2.中型项目:CakePHP、Zend Framework、Laravel、Thinkphp

    3.大型重量级项目:Yii、Symfony、Laravel

    以上划分也不绝对,在项目选型的时候,要充分考虑框架的可以定制性、扩展性,因为每个项目都无法确定你是否会随着需求的变化进行改变

    展开全文
  • mvc框架缺点

    2020-11-12 14:48:06
    什么是MVC框架? 1、什么是mvc Model View Controller,是模型-视图-控制器的缩写,一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个组件里,在改进和个性化定制界面的及...

    什么是MVC框架?
    1、什么是mvc

    Model View Controller,是模型-视图-控制器的缩写,一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个组件里,在改进和个性化定制界面的及用户交互的时候,不需要重新编写业务逻辑。mvc用于映射传统的输入、处理、输出功能在一个逻辑的图形用户界面的结构中。

    mvc就是类似三层的一种架构,主要采用封装(分层)的思想,来降低耦合度,从而使我们的系统更灵活,扩展性更好。

    model是应用程序中用于处理数据逻辑的部分。通常模型对象负责在数据库中存取数据。

    view是应用程序中处理数据显示的部分。通常视图是依据数据模型创建的。

    controller是应用程序中处理数据交互的部分。通常控制器负责从视图读取数据,控制用户输入,并向模型发送。

    2、mvc的优点

    (1)多个视图共享一个模型,大大提高代码的可重用性。

    (2)三个模块相互独立,改变其中一个不会影响其他两,所以依据这种设计模式能构建良好的松耦合性的组件。

    (3)控制器提高了应用程序的灵活性和可控制性。控制器可以用来连接不同的模型和视图去完成用户的需求,这样控制器可以为构造应用程序提高强有力的手段。

    3、mvc的缺点

    (1)增加了系统结构和实现的复杂性。

    对于简单页面,严格遵循mvc,使模型、视图与控制器分离,会增加结构的复杂性,并可能产生过多的更新操作,降低运行效率。

    (2)视图与控制器过于紧密的连接。

    视图与控制器是相互分离,但确实联系紧密的部件,视图没有控制器的存在,其应用是很有限的,反之亦然,这样就妨碍了他们的独立重用。

    (3)视图对模型数据的低效率访问。

    依据模型操作接口的不同,视图可能需要多次调用才能获得足够的显示数据。对未变化数据的不必要的频繁访问,也将损害操作性能。

    (4)目前,一些高级的界面工具或构造器不支持mvc。

    改造这些工具以适应MVC需要和建立分离的部件的代价是很高的,从而造成使用MVC的困难。

    综上,对于开发存在大量用户界面,并且业务逻辑复杂的大型应用程序,MVC将会使你的软件在健壮性、代码重用和结构方面上一个新的台阶。尽管在最初构建MVC框架时会花费一定的工作量,但从长远角度看,它会大大提高后期软件开发的效率。所以我们在具体适用时,要综合考虑其适用范围,

    4、框架vs设计模式

    (1)框架通常是代码重用,而设计模式是设计重用,

    架构则介于两者之间,部分代码重用,部分设计重用,有时分析也可重用。

    在软件生产中有三种级别的重用:

    内部重用,即在同一应用中能公共使用的抽象块;

    代码重用,即将通用模块组合成库或工具集,以便在多个应用和领域都能使用;

    应用框架的重用,即为专用领域提供通用的或现成的基础结构,以获得最高级别的重用性。

    (2)设计模式是对在某种环境中反复出现的问题以及解决该问题的方案的描述,它比框架更抽象。

    框架可以用代码表示,也能直接执行或复用,而对模式而言只有实例才能用代码表示 。

    设计模式是比框架更小的元素。一个框架中往往含有一个或多个设计模式,框架总是针对某一特定应用领域,但同一模式却可适用于各种应用。

    可以说,框架是软件,而设计模式是软件的知识。

    (3)简而言之:框架是大智慧,用来对软件设计进行分工; 设计模式是小技巧,对具体问题提出解决方案,以提高代码复用率,降低耦合度。

    5、总结

    通过MVC的学习,我们要知道它是用来分割页面和数据库访问的框架,降低了两者的耦合度,同时通过Controller的控制,也使系统更加的灵活,使我们的代码更健壮,复用性更强,但是凡事都有他适用的范围,我们不能觉得它好,就敢三七二十一的瞎用,有时可能会适得其反,因此MVC的学习还需要我们以后慢慢探讨。

    展开全文
  • EF框架缺点

    千次阅读 2019-06-27 09:23:52
    它是微软封装好一种ADO.NET数据实体模型,将数据库结构以ORM模式映射到应用程序中。 优点: 1.简洁的Linq to Sql语句大大提高了开发人员的效率,不要再写复杂的sql语句; 2.不再需要再管应用程序如何去连接数据库...
  • 如题所问:要实现页面框架结构用iframe好还是jsp include好,各有什么优缺点,望高手解答。
  • MVC框架缺点

    2019-08-16 11:16:21
    1、什么是mvc?? Model View Controller,是模型-视图-控制器的...mvc用于映射传统的输入、处理、输出功能在一个逻辑的图形用户界面的结构中。 mvc就是类似三层的一种架构,主要采用封装(分层)的思想,来降低耦合...
  • ThinkPHP(FCS)是一个轻量级的中型框架,是从Java的Struts结构移植过来的中文PHP开发框架。它使用面向对象的开发结构和MVC模式,并且模拟实现了Struts的标签库,各方面都比较人性化,熟悉J2EE的开发人员相对比较容易...
  • 整理了,Flutter优缺点、Flutter原理、Flutter框架结构等等内容,内容来自于各个大神的博客,本人只是个搬运工。
  • MVC框架缺点

    2021-04-20 21:12:01
    1.完全理解MVC比较复杂。 2.调试困难。 3.不适合小型,中等规模的应用程序 4.增加系统结构和实现的复杂性 5.视图与控制器间的过于紧密的连接并且降低了视图对模型数据的访问
  • php四大主流框架缺点总结

    千次阅读 2018-08-06 20:28:48
    ThinkPHP(FCS)是一个轻量级的中型框架,是从Java的Struts结构移植过来的中文PHP开发框架。它使用面向对象的开发结构和MVC模式,并且模拟实现了Struts的标签库,各方面都比较人性化,熟悉J2EE的开发人员相对比较容易...
  • 简述spring框架缺点

    千次阅读 2014-03-31 13:51:09
    一个完美的框架“黏合剂”。   2. 采用了分层结构,可以增量引入到项目中。   3. 有利于面向接口编程习惯的养成。   4. 目的之一是为了写出易于测试的代码。   5. 非侵入性,应用程序对Spring...
  • MVC框架的优缺点

    千次阅读 2016-02-25 20:44:47
    MVC框架的优缺点1、优点(1)可定制性(2)代码清晰,便于维护(3)测试友好性(4)轻量级(5)开源2、缺点(1)视图跟控制器过于紧密的连接(2)增加了系统结构和实现的复杂性(3)部分高级界面工具或构造器不支持...
  • SSH框架缺点

    2011-05-10 20:22:00
    典型的J2EE三层结构,分为表现层、中间层(业务逻辑层)和数据服务层。三层体系将业务规则、数据访问及合法性校验等工作放在中间层处理。客户端不直接与数据库交互,而是通过组件与中间层建立连接,再由中间层...
  • Java集合框架 概述 java集合框架是什么 Java集合是java提供的工具包,包含了常用的数据结构:集合、链表、队列、栈、数组、...java集合框架结构 紫色代表接口 绿色代表抽象类 黄色代表实现类 各个类型的优缺点 ...
  • Web:6 大主流 Web 框架缺点对比之Aurelia Aurelia 1.有什么优势? Aurelia有很多关于构建Web应用程序的方法,结构和想法。 这个框架的编写有很多技术上的优点。 2.有什么弱点和挑战? 我们估计最大的挑战...
  • 1) 实现了MVC模式,层次结构清晰,使程序员只需关注业务逻辑的实现; 2) 丰富的标签库,大大提高了开发的效率; 3) Struts2提供丰富的拦截器实现 3) 通过配置文件,就可以掌握整个系统各个部分之间的关系; ...
  • Web:6 大主流 Web 框架缺点对比之DoJo 2 Dojo 2 1.有什么优势? Dojo2 专注于带来更多构建在状态容器体系之上的动态组件的体验模式,填补了 react+redux 等框架的许多空白。 Dojo2 也知道它不单单只是在自己...
  • SSH框架缺点分析

    千次阅读 2010-03-12 15:02:00
    典型的J2EE三层结构,分为表现层、中间层(业务逻辑层)和数据服务层。三层体系将业务规则、数据访问及合法性校验等工作放在中间层处理。客户端不直接与数据库交互,而是通过组件与中间层建立连接,再由中间层与...
  • java框架,优缺点

    千次阅读 2020-02-07 10:53:13
    java2e框架,优缺点。 Spring 框架 优点 1.提供了一种管理对象的方法,可以把中间层的对象有效地组织起来 2.采用了分层结构,可以增量引入到项目中。 3.代码测试较容易 4.非侵入性,应用程序对Spring API的依赖可以...
  • scrapy框架的优缺点

    千次阅读 2019-11-18 18:12:39
    Scrapy是用纯Python实现一个为了爬取网站数据、提取结构性数据而编写的应用框架,用途非常广泛,用户只需要定制开发几个模块就可以轻松的实现一个爬虫,用来抓取网页内容以及各种图片,非常之方便。 尽管Scrapy原本...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,404
精华内容 561
关键字:

框架结构缺点