`
bardo
  • 浏览: 378315 次
  • 性别: Icon_minigender_1
  • 来自: 上海
博客专栏
D1407912-ab64-3e76-ae37-b31aa4afa398
浅述PHP设计模式
浏览量:11807
9d6df9f7-91da-3787-a37c-0e826525dd5d
Zend Framewor...
浏览量:10116
85b628bd-a2ed-3de2-a4b1-0d34985ae8b6
PHP的IDE(集成开发环...
浏览量:9502
社区版块
存档分类
最新评论

Zend Framework的缺陷(连载之5)

    博客分类:
  • PHP
阅读更多
    上一节我们讲的是Zend Framework中相对于基本编程规范的违规。也许有人会说,这种违规是可以忍受的。代码中一些地方的烦琐有时是必须的。我们可以接受这样的不同意见。那么,如果一个框架在面向对象的基本原则中违规,那你还可以忍受吗?
     设计模式和代码重构理论,是基于基本的面向对象的基本原则。这里我们有必要先讲一下这些基本原则:
     开闭原则(OCP):对可变性进行封装。对象必须能对自己负责。这与单一职责的原则是完全一致的。
     里氏代换原则(LSP):如何进行继承。继承必须维护遗传。而不能产生变异。这里的变异是指破坏了原有的结构与数据关系。
     依赖倒转原则(DIP):要针对接口编程。不要针对实现编辑程。抽象不应当依赖于细节;细节应当依赖于抽象。
     接口隔离原则(ISP):恰当地划分角色和接口。使用多个专门的接口比使用单一的总接口要好。
     合成/聚合复用原则(CARP):尽量使用合成、聚合,尽量不使用继承。继承是“Is-A”关系。合成/聚合是“Has-A”关系。
     迪米特法测(LoD):不要和陌生人说话。即:不存在对间接关系类的任何操作。
     这六大原则,相对于初学者,也许过于抽象。不过,不要紧,我们下面的缺陷分析,有助于你对这些原则有一些具体的认识。
     假如你是一个系统架构师,那么,你现在也许会说,我说的情况,在Zend Framework中根本不存在。
     那么,我们还是从更具体的实例进行分析吧。
     Zend Framework中有很多地方完全属于烂用依赖倒转原则(DIP)。简单来说,假如变化本身,只是一个方法,一个函数,相对于PHP,我们根本不需要使用依赖倒转原则为此定义出一个接口,并让用户去写只有一个方法的类,产生一堆这样的类文件。
     一个实例:Zend Framework中的Filter类,就是这种不良代码的典型!!这样做的坏处,那就是,变化的一切均分布在不同的类中。不仅不易于管理,同时也影响效率。另一方面,PHP5,提供了 __call, call_user_fuc, call_user_fuc_array, 所有这一切,均是为给这一种特别的聚合提供方便。凭错这些,我们可以直接增加函数列表,而函数列表,相对于代码管理,更加方便,并且,单一方法上的添加,可以直接使用继承法。但直接继承的结果,则是破坏了类与类之间的偶合。但如果是真的松耦合,那继承就没有什么关系。
     一种放松耦合的实现方式,即使用相关的配置,并使用createInstance一类的方法,创建指定的类的实例,这可能是一种高难度。一般架构师或程序员不一定能设计出这样的代码。
     最后,还需要说的是, Zend Framework中的Filter类即便是目前这样,也应当写得更好,Filter现在是把Filter与validate给混淆了。同时,所谓的链式操作,实际仍是不方便的操作,PHP函数,原本就可以接受不定数量的参数,所以,完全可以不用链式操作,而一次性传入所有要过滤的类型。但它没能做到。再有就是,输入与输出,原本应当要分开的,但却也是搅合在一起。假如,一个编辑器,输出是的 23,456,321这种格式的数字,表单提交后,用户很容易会直接使用整数过滤器。则肯定会出错。
      Zend Framework中实际这样的实例是相当多的。这里就不多说了。

附:非常高兴,已经看到有人拍砖了,参见:
      http://www.netroby.com/article-1706.html
     由此:这里需要声明一下:此文的目的,不是为了抵毁Zend Framework,而根本的目的,是在于两点:其一,教会大家,如何选择自己合适的开发框架;其二:让一些“框架开发者”清楚,一个框架究竟要做成什么样子。特别是,国内那些希望自己的框架能够拥有用户的开发者。很多是不了解一个大型企业开发的实际需求,闭门造车。个人观点,一个真正完全了解Zend Framework缺陷的人,才能开发出有拥户的有技术含量的框架,如同CI架构,确实是改观了一种缺陷,但只能用于小型网站,或许,它的定位就是如此。但如果拿它与Zend Framework相比,它就是一种玩具!  第三,我所识为的缺陷,也很可能是认识上的误区。因而,在此能引得同道的共同探讨,则有利于彼此的进步。
      所以,继续希望有人拍砖,但骂街性质的,强词夺理的(比如:说什么Zend Framework2.0肯定会改掉这些缺陷等观点),本人不会理会。所以只能说声抱歉。
      热烈欢迎一切理智的技术讨论。
5
1
分享到:
评论
5 楼 nm052001 2010-09-16  
其实。楼主也应该写一下ZF 的优点。和symfony 的优点。
看看各框架的利弊所在
4 楼 netroby 2010-05-25  
Zend Framework的市场也不是应该由我来操心的,你写什么我不关心。维基百科用symfony,没用Zend Framework也不能说明什么问题,你不妨找一个实际应用中用Zend Framework来开发,拖累了开发进度的例子,以便更好的证实你的论调。
在我公司的实际开发中,ZendFramework的使用还处在小规模局部化应用,注重效率的地方,还是用裸写调优后代码来处理的。也并未看出来ZendFramework带给我们很多负面的影响。

如果你不放心ZendFramework的表现,你可以选 择你所看好的symfony,也可以自行解决你的需求。
当然了,跟本系列文章的主题思想就相去甚远了。

框架只是工具,去芜存精,适当加以利用,才能发挥它的最大价值。

我看待框架,带着辩证思维,在找不到证明Zend Framework是一无是处的框架的前提下,我保留慎用的观点。


你的这系列文档只提到Zend Framework一些做的不好的方面。如果你够大度的话,不妨写一些公正的文章来分析Zend Framework的优异点,这样才会给没有接触Zend Framework或了解不深的使用者更全面的认识。

3 楼 bardo 2010-05-23  
netroby 写道
正如你连载五篇所说,我也注意到你提的这些问题,但我说我期待zend framework在2.0版会有更好的表现,怎么在你眼中就成了强词夺理了?
你说ZendFramework现在怎样怎样,我无可辩驳,因为问题的确有存在。但你也不能否认ZendFramework还在不断成长和完善当中。
如果你对ZendFramework有更好的见解和论点,何不尝试成为Commiter呢?总比这边大谈特谈来的要好得多。
你只能让没接触过ZendFramework的开发人员心生畏惧,原来ZendFramework这么不堪造就?
其实真正又是怎么一回事呢?

你好像担心的是本人的文章影响zend的市场,是吧?我写与不写实际对实际市场的影响力相当小,你不妨看看现实:维基百科,用的是symfony,而不是ZendFramework,如果要选现有的框架,我个人肯定选symfony,因为它是最成熟的,鞭开发插件的人数,可用插件也是相当多的。一个不大的主框架,加上大量的可选插件库,远远要比40M的大多数功能用不上的代码要强得多。ZendFramework怎么说都不容乐观。与我写什么无关!!
2 楼 netroby 2010-05-22  
我不会骂人,因为我关心的是技术,我只是如何能更好的利用这些工具来服务我们的开发需求。
你应该还注意到我所说的,框架不是必须要用的,要看需求的。我在实际开发中,也不尽都用了框架,有时为了效率和性能,还是写简单的语句更为适宜。
1 楼 netroby 2010-05-22  
正如你连载五篇所说,我也注意到你提的这些问题,但我说我期待zend framework在2.0版会有更好的表现,怎么在你眼中就成了强词夺理了?
你说ZendFramework现在怎样怎样,我无可辩驳,因为问题的确有存在。但你也不能否认ZendFramework还在不断成长和完善当中。
如果你对ZendFramework有更好的见解和论点,何不尝试成为Commiter呢?总比这边大谈特谈来的要好得多。
你只能让没接触过ZendFramework的开发人员心生畏惧,原来ZendFramework这么不堪造就?
其实真正又是怎么一回事呢?

相关推荐

    ZendFramework-1.10.4-minimal

    "ZendFramework-1.10.4-minimal" 这个标题表明我们正在处理的是 Zend Framework 的一个特定版本,即1.10.4,并且是精简版(minimal)。这意味着它可能包含了框架的核心组件,但可能去除了某些非必要的或附加的模块,...

    zend framework中英文手册.rar

    5. **测试和调试**:利用 Zend Framework 的测试工具进行单元测试和集成测试,确保代码质量。 总之,无论您是初学者还是经验丰富的开发者, Zend Framework 中英文手册都是宝贵的资源,能够帮助您快速上手并深入...

    ZEND FRAMEWORK 1.11.7 中文参考文档

    Table of Contents •Introduction to Zend Framework •Overview •Installation •Learning Zend Framework •Zend Framework Quick Start •Autoloading in Zend Framework •Plugins in Zend Framework •...

    Zend Framework 2 Application Development

    Whether you are learning Zend framework from scratch or looking to sharpen up your skills from previous versions, Zend Framework 2 Application Development will help you to harness the power of Zend ...

    zend framework 中文手册

    描述提到"zend framework zendframework manual 手册,Zend Framework手册 中文版,有一部分还没有汉化",这意味着虽然该手册是中文版本,但可能并非全部内容都已翻译完成,部分原文可能是英文状态。 **Zend ...

    基于Zend Framework 框架的CMS PHP 源代码

    Zend Framework推崇“选择性使用”原则,开发者可以根据项目需求选择使用其中的部分或全部组件,极大地提高了开发效率和代码质量。 **二、CMS系统的核心功能** CMS系统通常包含以下核心功能: 1. **内容创建与...

    Zend Framework 2 官方教程汉化版

    Zend Framework 2 官方教程汉化版

    ZendFramework 1.12.9 代码和文档.rar

    **Zend Framework 1.12.9:框架详解与应用** **一、Zend Framework简介** Zend Framework(简称ZF)是一款开源、基于PHP语言的企业级Web应用程序开发框架。它遵循MVC(Model-View-Controller)设计模式,为开发者...

    Zend Framework 中文 手册 入门教程

    Zend Framework 中文 手册 2008年12月01日.chm MD5: DD29C39D12E9C0B38FD3475A12D05B73 SHA1: 1A6BBBF9311013F2FF2BF97752332160ED767526 CRC32: 88210ABD Zend Framework 入门教程(简体中文1.52版)v0.12.pdf MD5:...

    Zend Framework+smarty用法实例详解

    在Zend Framework中整合Smarty模板引擎,可以让开发人员利用Zend Framework强大的框架特性和Smarty简洁的模板语法来创建更为复杂和功能丰富的Web应用。以下是整合Zend Framework与Smarty时需要了解的相关知识点。 ...

    Zend Framework教程之Zend_Layout布局助手详解

    Zend Framework教程之Zend_Layout布局助手详解重点介绍了Zend Framework中Zend_Layout组件的使用方法。Zend_Layout是一个用于管理布局的组件,它允许开发者定义应用程序的布局结构,使得可以在不同的页面中复用相同...

    Zend Framework实例教程

    - **PHP 5**:作为运行环境,Zend Framework要求PHP 5或更高版本。 - **Apache Web Server**:为了更好地演示示例代码和利用`mod_rewrite`模块的功能,你需要一个Apache服务器。`mod_rewrite`用于URL重写,使URL更...

    PHP zend framework 教程 很好

    PHP zend framework 教程 很好PHP zend framework 教程 很好PHP zend framework 教程 很好PHP zend framework 教程 很好PHP zend framework 教程 很好PHP zend framework 教程 很好PHP zend framework 教程 很好...

    zend framework 1.7.5 使用基本例子

    **Zend Framework 1.7.5 基本使用教程** Zend Framework 是一个开源的、基于组件的PHP框架,用于构建可扩展、高性能的Web应用。版本1.7.5是该框架的一个重要里程碑,提供了丰富的功能和改进,旨在提高开发效率。在...

    ZendFramework中文手册HTML版

    Zend Framework 遵循 Model-View-Controller (MVC) 设计模式,它将应用程序的业务逻辑、数据和用户界面分离开来,使得代码更易于维护和扩展。在 MVC 架构中,Model 负责处理业务逻辑,View 负责展示数据,而 ...

    ZendFramework最新版本

    这个“最新版本”指的是 Zend Framework 的 1.11.10 版本,它包含了 MVC(Model-View-Controller)架构模式,这是 Web 开发中常用的设计模式,用于分离应用程序的不同部分,提升代码的可读性和可维护性。 1. **MVC ...

    zend framework教程.zip

    Zend Framework 是一个基于组件的 PHP 开发框架,由 Zend Technologies 公司创建并维护,被PHP官网推荐为MVC(Model-View-Controller)框架之一,尤其适合构建企业级的Web应用。本教程将深入讲解 Zend Framework 的...

    zend framework 中文版手册(最新)

    5. **服务层(Zend_Service)**:这一组件允许开发者轻松集成第三方服务,如 Amazon S3、Twitter 和 Google Maps。手册会指导如何使用这些服务并进行数据交换。 6. **RESTful Web Services(Zend_Rest)**:手册将...

    Zend Framework 3 Developer's Guide azw3

    Zend Framework 3 Developer's Guide 英文azw3 本资源转载自网络,如有侵权,请联系上传者或csdn删除 查看此书详细信息请在美国亚马逊官网搜索此书

Global site tag (gtag.js) - Google Analytics