Haohappy的专栏--PHP5研究中心

PHP5研究中心 研究专业PHP技术,传播全球最新PHP动态 ,推广国内PHP企业应用

陈浩ID:Haohappy2004
574272次访问,排名64好友1人,关注者29
make ur life better..
Haohappy2004的文章
原创 167 篇
翻译 0 篇
转载 0 篇
评论 506 篇
Haohappy的公告
我的Blog主要关于PHP/Java WEB开发。欢迎讨论:

Email & MSN:


所有文章均为Haohappy原创或翻译,需要转载请通过Email与我联系


我的网站:
PHPEye开源社区
phpeye.com

我的新书:


《Programming PHP》中文版第二版,陈浩(Haohappy)、胡丹、徐景(RainX)译,电子工业出版社出版,2007年4月上市)

网上书店购买地址:
当当网(dangdang.com)
互动出版网(china-pub.com)
第二书店(dearbook.com)
华储网(huachu.com.cn)
蔚蓝书店(welan.com)

本书 配套论坛  勘误系统

常用参考手册:

最近评论
PrideRock:谢谢关注
jodynet:CSDN最近两年的改版,不知道改成什么样子。我已经好久没登陆CSDN看文章了。整个网站很乱,惨不忍睹来形容一点也不为过。
jiangtao:谢谢对我们的建议和意见。
wysea:呵呵,真巧,下午在CSDN上看到这篇文章,被打击的不行,这里HAOHAPPY就出头说话了,自信心又起来了! 谢谢!
ModelKingChina:深有同感,当时看到这篇文章只想拿块砖头拍编辑的脑袋.CSDN作为国内非常有影响力的IT综合站,在对待语言方面是不应该有所偏见的,如此简单的e文,本不应该翻译错误,更多的我想是编辑曲意的翻译. 语言与平台之争向来一个老大难问题,但CSDN却无论如何也不应该卷入的.
文章分类
收藏
    相册
    Blogs
    Fantasy Soft(RSS)
    Freeman的Blog
    hosander的专栏
    PHPEye.com
    web2.0 focus(RSS)
    开发视界[专家专栏](RSS)
    歪脖·坑(RSS)
    存档
    订阅我的博客
    XML聚合  FeedSky

    原创 关于三种主流WEB架构的思考收藏

    新一篇: Delphi for PHP 评测 | 旧一篇: 启动和运营开源项目的二十个黄金法则

    关于三种主流WEB架构的思考
    Haohappy  haohappy AT msn.com
    转载请注明来源:http://blog.csdn.net/haohappy2004

    做WEB好几年了,各种语言和技术都稍有涉猎。今天心血来潮,突然想总结一下。其实不论什么技术,什么需求,通常WEB开发就是通过WEB前端管理一个或大或小或独立或分布式的关系型数据库,很多东西都是相通的。这里说的WEB架构,是指WEB应用开发中每种技术独有的资源组织形式(包括文件,数据库,HTTP请求处理等。注意并非OO的开发方式才有架构一说),也许说开发方式更容易让人理解一些。

    以下想法主要以PHP实现为示例,但很多体会我想Java,.NET,Ruby开发者应该也很容易理解。最后是我对于刚面世就引起无数人关注的Delphi fo PHP的评测

    WEB程序的架构基本上可以分成以下三类:

    (一) 基于“WEB页面/文件”,例如CGI和PHP/ASP程序。程序的文件分别存储在不同的目录里,与URL相对应。当HTTP请求提交至服务器时,URL直接指向某个文件,然后由该文件来处理请求,并返回响应结果。

    比如http://www.website.conm/news/readnews.php?id=1234

    可以想像,我们在站点根目录的news目录下放置一个readnews.php文件。

    这种开发方式最自然,最易理解,也是PHP最常用的方式。要注意产生的URL对搜索引擎不友好,不过你可以用服务器提供的URL重写方案来处理,例如Apache的mod_rewrite。

    (二) 基于“动作”(Action)。这是MVC架构的WEB程序所采用的最常见的方式。目前主流的WEB框架像Struts、Webwork(Java),Ruby on Rails(Ruby),Zend Framework(PHP)等都采用这种设计。URL映射到控制器(controller)和控制器中的动作(action),由action来处理请求并输出响应结果。这种设计和上面的基于文件的方式一样,都是请求/响应驱动的方案,离不开HTTP。

    比如 http://www.website.com/news/read/id/1234

    可以想像在实际代码中,我们会有一个控制器newsController,其中有一个readAction。不同框架可能默认实现方式稍有不同,有的是一个Controller一个文件,其中有多个Action,有的是每个Action一个文件。当然这些你都可以自己控制,题外话。

    这种方式的URL通常都很漂亮,对搜索引擎友好,因为很多框架都自带有URL重写功能。可以自由规定URL中controller、action及参数出现的位置。

    另外,还有更直接的基于URL的设计方案,那就是REST。通过人为规定URL的构成形式(比如Action限制成只有几种)来促进网站之间的互相访问,降低开发的复杂性,提高系统的可伸缩性。REST对于Web Services来说是一个创新。

    虽然本文讨论的是单个项目所采用的架构,而REST是为了解决网站之间的通讯问题,但REST的出现,会对单个项目的架构造成影响(很显然你在开发时就要构造规范的URL)。将来混用REST和MVC应该也是一种趋势。RoR提供很好的REST支持,Zend Framework也提供了Zend_Rest来支持REST,包括Server和Client。

    (三) 基于“组件”(Component ,GUI设计也常称控件)、事件驱动的架构,最常见的是微软的.NET。基本思想是把程序分成很多组件,每个组件都可以触发事件,调用特定的事件处理器来处理(比如在一个HTML按钮上设置onClick事件链接到一个PHP函数)。这种设计远离HTTP,HTTP请求完全抽象,映射到一个事件。

    事实上这种设计原本最常应用于传统桌面GUI程序的开发,例如Delphi,Java Swing等。所有表现层的组件比如窗口,或者HTML表单都可以由IDE来提供,我们只需要在IDE里点击或拖动鼠标就能够自动添加一个组件,并且添加一个相应的事件处理器。

    这种开发方式有几个优点:

    · 复用性 -代码高度可重用。

    · 易于使用 -通常只需要配置控件的属性,编写相关的事件处理函数。

    我个人也挺喜欢这种方式,PEAR就提供了相当强大的HTML_QuickForm,用于在页面添加表单元素及其事件处理函数,还可以与Smarty等模板引擎相结合。这对于项目开发来说是一个补充性的功能,在项目中的某些部份使用QuickForm,有时可以大大加快开发。

    而完全基于组件和事件驱动的开发框架对于PHP来说也已经不新鲜,PRADO就是一个这样的框架,曾经得过Zend编程大赛的头奖。但目前来说很显然Prado所提倡的这种开发方式仍然没有被大部份PHP程序员所接受。为什么呢?

    我觉得主要有以下两个问题:

    (1)效率问题

    这里指的不是开发效率,而是代码的执行效率。众所周知,正常情况下,PHP的执行是相当高效的。但是目前这种基于控件的框架效率都成问题。Prado本身提供了一个缓存机制来缓解这个问题。如果不采用缓存,可以说很多站点根本不能使用Prado这样的框架,比如门户网站,大型论坛等。

    但ASP .NET不太一样,因为它是编译型的框架,最后生成的代码是编译生成的,不需要再次进行中间过程的诸多处理,所以在第一次执行之后速度会很快,执行效率还是很高的。 这是语言层次的功能,Prado无法通过代码层次的努力完全弥补。

    (2)没有强大的IDE支持

    设置控件的属性,添加其对应的事件处理器,看似简单,但控件多了,这也是个繁重的工作。.NET的强大就在于它把程序员从重复的工作中解放了出来,设置属性很方便,事件处理器也会自动添加。Prado目前没有这样的IDE支持。

    总之,这种基于控件的框架比较适合于用户交互较多的,需要对页面中的很多组件设置不同处理操作,但对于性能要求不高的应用。另外,带有组件支持的框架通常对AJAX的支持都较好,比如.NET和Ruby on Rails。

    综上,三种架构基本上可以代表目前的所有主流WEB开发方式,包括PHP,JavaEE,.NET,Ruby/RoR。

    目前PHP开发的状况和未来的趋势:

    平时做PHP比较多,特别总结一下PHP开发的趋势。目前在PHP开发中,我们最常用的是基于“文件”的架构,其实也就是一种“面向过程”的开发方式。通常我们写PHP程序的目的就是“快点上线,让程序跑起来”。而且大多数PHP程序员还要和HTML、CSS做近身搏斗,所以如果程序太抽象,调整视觉效果就比较困难。所以对于小项目,这是一个最好的选择。

    但越来越多人认识到,面向对象和MVC框架更能促进代码的复用和分享,而且程序易于扩展,随着程序复杂性的增加这个趋势越明显。所以OO框架层出不穷。目前PHP框架当中最有前景的是CakePHP、Symphony和Zend Framework,各自拥有活跃的社区和庞大的用户群,都在快速成长当中。PHP的框架都避免走Java框架庞大臃肿的老路,致力于快速开发,而且主动模仿和吸收RoR这些优秀框架的新特性。随着PHP5的普及和这些框架的成熟,加上PHP原本开发社区的庞大人数,将来也许又会再产生出一些行业性的标准。

    这种选择适合于中大型项目,特别是需要较大的团队合作和需要长期维护和二次开发情况。个人认为这是将来PHP开发的趋势。

    而对于基于组件和事件驱动的开发方式大多数PHP程序员都不感兴趣。但是也有不少人在做这方面的努力,例如Codegear的Delphi for PHP,就吸引了很多人的关注。如果有强大的商业支持,也许将来在开发市场也会占一席之地。

    我会在下一篇文章介绍D4P的新特性并作评测。

    WEB开发的未来展望:

    随着更贴近HTTP的REST的流行,我觉得像.NET和Java中的抽象组件的方式会受到冲击。因为这些组件并不如它们所承诺的那么方便。未来MVC+REST+RIA的模式应该会比较流行。

    AJAX是一把双刃剑,尽管事件驱动的架构看起来非常适合于处理异步的请求(可以想像页面中存在几个组件,每个组件都可以触发异步请求,对应对服务器端的某个事件处理器,看起来是很理想的一个处理方式),但要为客户端自动生成良好的JavaScript代码是很不容易的,要满足各种浏览器的兼容性要求,还要能够自己进行扩展,以满足项目中千奇百怪的需求。 很多时候我更倾向于使用一些JS框架如Prototype来自己开发各种效果,而不是在服务器端生成。在服务器端生成JS的两个结果,一是对生成的代码不信任,二是人变傻,因为你并不知道真正发生了什么。

    (一点牢骚也贴上来)
    关于WEB开发的个人疑惑:

    l 为了让开发更简单,我们不得不学习使用复杂的开发工具和框架,这到底是一个进步,还是退步?

    l IDE让程序员变聪明还是变傻? 当我们在服务器代码里面就可以设计客户端界面,这是一个进步还是退步?

    举个例子说,微软的ASP.NET AJAX,让我们可以在服务器端设计各种异步的控件。那么程序员甚至可以不会Javascript,不懂AJAX就设计出各种客户端效果。要是哪一天项目需要设计稍复杂的效果,靠IDE和框架无法自动完成,你要怎么办? 到这个时候再来学JS,也许就迟了。更可怕的是,技术在更新和淘汰,可能十年之后,你会发现自己除了各种IDE之后,真正精通的技术很少,脱离了IDE你写一个小程序都要查半天API手册,因为你平时都是依赖“自动补齐”来写代码的! 这样的情景,我想没有人愿意发生。

    也许对于短期开发的项目来说,是一个进步,但对于程序员个人的成长来说,这并不是好事。对工具的依赖,导致了我们对于底层和核心技术的不求甚解,限制了个人的成长。

    发表于 @ 2007年04月27日 10:00:00|评论(loading...)|编辑

    新一篇: Delphi for PHP 评测 | 旧一篇: 启动和运营开源项目的二十个黄金法则

    评论

    #rose0335 发表于2007-04-27 11:06:00  IP: 219.142.240.*
    现在ASP.NET AJAX确实毁了不少人,就像很多人都会用windows,但对DOS一无所知一样。
    #ChinaRa 发表于2007-04-27 12:21:09  IP: 60.190.81.*
    “(2)没有强大的IDE支持”

    看看Delphi for PHP
    2007-04-27 15:13:53作者回复
    请看我的下一篇文章“Delphi for PHP 评测”。 D4P还远谈不上强大。<br />
    #jyk 发表于2007-04-27 12:55:32  IP: 59.44.55.*
    对于你的牢骚很是占同。
    #BeautifulWorld 发表于2007-04-27 13:24:16  IP: 218.108.41.*
    脱离了IDE写程序什么时候会发生呢?
    就好像你不坐飞机去美国一样,纯粹自找麻烦。
    IDE就像现在的汽车、飞机,现在的大炮,导弹。
    放弃IDE就像回到原始社会一样出行用两条腿,打仗用木棒石头。
    2007-04-27 15:14:55作者回复
    没有人说不用IDE,你误会了。 我是提倡不依赖于IDE,多关注技术本身的细节,才有益于个人的成长。
    #BeautifulWorld 发表于2007-04-27 13:37:51  IP: 218.108.41.*
    不用IDE和用IDE的比较
    一个原始人一生走过的路没有一个现代人坐一天飞机的路多
    一支古代10万人的军队同时射箭的威力远没有现在一个导弹的威力
    #BetonArmEE 发表于2007-04-27 14:10:08  IP: 60.191.127.*
    刚放出来的fcsp新型web框架,是目前所有架构中速度最快的
    http://lapcf.calvinwilliams.name/index/index.html
    2007-04-27 15:25:40作者回复
    PHP也可以运行为FastCGI,未必要用C,你所举的Yahoo!就是这样,使用的是PHP。 <br /><br />要说效率当然用C比较快,但是能够做到“开发敏捷”吗? 个人表示怀疑。现在开发项目要求在效率满足要求的前提之外,尽快减短开发周期,这正是RoR流行的主要原因。WEB项目不能一味追求执行效率,因为很多情况下我们可以用可伸缩性来弥补,这是和桌面程序不同的地方。
    #zmb 发表于2007-04-27 22:11:22  IP: 59.52.183.*
    不错
    #uuq 发表于2007-04-28 01:39:54  IP: 221.216.20.*
    其待D语言出来,可以用D语言做cgi
    #lost_alienpp 发表于2007-04-28 09:42:13  IP: 123.112.16.*
    不用ide简直不可想像,那么多api谁又能记得住呢,不光是ide,还有配置文件里的那老些标签呢?我感觉现在的各种框架什么的,完全是在承认必须使用ide的前提下做出来的oo!汗。。。

    it要想发展,必须走傻瓜化的道路,尽管程序员的确是越来越不值钱了。。。
    #sunruping 发表于2007-04-28 10:37:36  IP: 61.237.230.*
    说的有点偏激了。说到底,终归你是从程序员走过来的。任何语言都有自己的优势。
    #Ax 发表于2007-04-28 10:50:38  IP: 121.32.121.*
    是啊
    #peterchencx 发表于2007-04-28 14:21:58  IP: 218.69.228.*
    边看文档便用IDE
    #RANGER 发表于2007-04-28 14:50:19  IP: 10.56.64.18, 58.*
    IDE不用是不行的,否则生产率和质量就会出大问题
    个人的基本功还是要有的,否则遇到复杂问题连门都找不到
    #xxcxx 发表于2007-04-28 18:50:50  IP: 218.107.148.*
    xxxxxx
    #xxcxx 发表于2007-04-28 18:51:21  IP: 218.107.148.*
    AJAX就是javaScript
    #LGS 发表于2007-04-29 09:26:56  IP: 222.182.33.*
    楼主说了这么多,就是不提倡使用IDE?
    不使用IDE,就是使用底层技术了?
    #Haohappy2004 发表于2007-04-29 10:00:20  IP: 125.77.167.*
    这篇文章的主题不是IDE啊,这只是我最后附的一点想法,怎么大家都关注这个,本末倒置了。

    重申一遍:绝对不是说不用IDE,而是要多关注技术本身,打好基础。

    #BlackTear 发表于2007-04-29 13:21:29  IP: 123.115.9.*
    很赞同楼主的疑惑!
    现在复杂的东西太多了,但是大多数的复杂的东西都承诺能让开发简单起来。可是这些承诺都是建立在更复杂的情况上的。这到底是简单了还是复杂了?
    PS:如果让我用EJB写个Hello World还不如让我跳楼呢!
    #webphoenix 发表于2007-05-24 13:11:42  IP: 220.196.62.*
    呵呵,我都不用IDE的,现在开发只用 Editplus
    #qmxiu531 发表于2007-05-24 18:21:13  IP: 58.60.4.*
    楼主真牛,不知道小生什么时候能练到这一地步哦
    #softwave 发表于2007-07-26 10:57:12  IP: 121.29.172.*
    同意HaoHappy的观点
    现在的程序员学的不是语言,而是IDE。
    慢慢发展下去,就像一个男人在家只会玩电脑,不会接电线一样。
    #cuixiping 发表于2007-08-03 02:13:20  IP: 125.77.153.*
    我也是一般的程序都只用Editplus的,用久了自定义的多了,Editplus用起来非常顺手,代码简,速度快。

    HaoHappy,你好,我们是校友吧?看过你在鼓浪上的很多文。。。
    #Haohappy2004 发表于2007-08-04 23:37:49  IP: 121.204.151.*
    To cuixiping:呵呵,既然你说到鼓浪听涛BBS,我想是的:)
    #yong631 发表于2007-08-13 16:16:14  IP: 59.40.234.*
    现代的要发展,原始不能丢.
    #fsnow2005 发表于2007-08-27 15:37:56  IP: 122.4.101.*
    都是感情动物,生于忧患,死于安乐啊
    #seeplus 发表于2007-08-29 09:24:20  IP: 192.168.2.*
    人云亦云,老是思考别人早想过千百遍的东西,没创意。
    #Actan 发表于2007-10-17 15:21:24  IP: 218.206.107.*
    我在用phpDesigner2007,有代码提示和自动完成等功能,我觉得非常好用。我也不需要其它的功能了,也不需要IDE多么强大,多么占内存,但是我觉得这个真的很好用。建议开发PHP的程序员用一下。我赞成有简单功能的IDE,但不是简单到像EDITPLUS那样。我很满意PHPdesigner2007
    #star622 发表于2007-11-11 11:12:26  IP: 219.143.144.*
    语言只是一种工具,而 PHP、Java 这类语言很多时候都只是一种配置工具,现在的程序员很多都不能算是程序员,只是会使用配置工具写配置文件的人,什么都是现成的,不是配置一下系统就出来了么?
    真正的程序员,并不在于语言本身,而是在于编程思路,要实现一个东西,怎么实现,用那种方式实现,如果不去考虑如何实现而是去寻求现有解决方案调用一下,那么充其量也只能算是一个配置人员。
    至于框架,要看什么项目,框架不是万能,各种框架也都有其存在的价值,要视具体项目而定。
    IDE其实跟语言一样,都只是一种工具而已,如果一个真正的程序员去使用好的IDE一样能做程序员的事情,而一个配置人员即使不使用IDE,那也不会成为真正的程序员。
    #star622 发表于2007-11-11 11:13:55  IP: 219.143.144.*
    语言只是一种工具,而 PHP、Java 这类语言很多时候都只是一种配置工具,现在的程序员很多都不能算是程序员,只是会使用配置工具写配置文件的人,什么都是现成的,不是配置一下系统就出来了么?
    真正的程序员,并不在于语言本身,而是在于编程思路,要实现一个东西,怎么实现,用那种方式实现,如果不去考虑如何实现而是去寻求现有解决方案调用一下,那么充其量也只能算是一个配置人员。
    至于框架,要看什么项目,框架不是万能,各种框架也都有其存在的价值,要视具体项目而定。
    IDE其实跟语言一样,都只是一种工具而已,如果一个真正的程序员去使用好的IDE一样能做程序员的事情,而一个配置人员即使不使用IDE,那也不会成为真正的程序员。
    #star622 发表于2007-11-11 11:16:33  IP: 219.143.144.*
    语言只是一种工具,而 PHP、Java 这类语言很多时候都只是一种配置工具,现在的程序员很多都不能算是程序员,只是会使用配置工具写配置文件的人,什么都是现成的,不是配置一下系统就出来了么?
    真正的程序员,并不在于语言本身,而是在于编程思路,要实现一个东西,怎么实现,用那种方式实现,如果不去考虑如何实现而是去寻求现有解决方案调用一下,那么充其量也只能算是一个配置人员。
    至于框架,要看什么项目,框架不是万能,各种框架也都有其存在的价值,要视具体项目而定。
    IDE其实跟语言一样,都只是一种工具而已,如果一个真正的程序员去使用好的IDE一样能做程序员的事情,而一个配置人员即使不使用IDE,那也不会成为真正的程序员。
    #xmucmd 发表于2008-03-24 04:41:40  IP: 59.61.71.*
    一直打算认真学php,可惜接的项目都是asp.net的。从asp.net ajax起步,慢慢学javascript来补充,最后再来学php吧,555
    项目做不完什么都没得说了,一直觉得MVC最酷,就是没机会去碰他
    发表评论  


    当前用户设置只有注册用户才能发表评论。如果你没有登录,请点击登录
    Csdn Blog version 3.1a
    Copyright © Haohappy