用zend framework完成了两个项目

  前段时间开始尝试使用zend framework进行真正的项目开发,分别完成了公司内部的客服系统和一个web2.0的项目,两个项目由于一个仅供内网使用,一个正在进行alpha测试,所以均暂时无法提供出来在网上访问,等alpha测试完成进入Beta测试后,我会公布出来。经过这两个项目后,对zend framework的理解加深了不少。

  Zf的确是个不错的框架,基于它开发的系统逻辑和结构都非常清晰,不同的程序员很容易进行沟通和团队协作,在我的项目中主要采用了 Zend_Acl、Zend_Controller、Zend_Config、 Zend_Db、 Zend_Registry、Zend_Search_Lucene这几个模块,整个的实现完全按照MVC和纯粹的面向对象实现,在项目中整合了Smarty到Zend_View,整合Memcached到Cache,自己继承并扩展了Zend_Controller_Action的功能,主要进行一些针对各个Controller都需要的功能进行统一处理,比如基于Acl进行权限验证。同时我还借用了PEAR的一些组件,比如Http、Benchmark模块。

  这次的两个项目都基于Zf 0.9.2 实现,最近升级到了0.9.3。最早我一直犹豫是否使用Zf,主要原因是它的Search_Lucene模块对UTF8的支持不够好,加上Zend_Db的部分功能未能满足我的需求,直到0.9.2版的发布我才下了决心使用,在项目中使用的Zend_Lucene全文检索从目前来看,功能和效果都感觉不错,还没有进行大规模的性能测试,而Zend_Db我进行了扩展,增加了对MySQL的Master/Slave以及Cluster的支持。

  从团队开发、架构设计、代码规范、开发成本和周期等方面考虑,建议有条件的朋友都可以尝试一下Zf,尤其是一些类似MIS系统的BS项目,用Zf一定能事半功倍。在大型商用Web项目开发中,使用Zf也是完全可以的,性能方面等我那个项目投入使用后给出参考数据,我目前自己debug测试的结果来看,效率还是非常不错的,有可能Router方面会稍微多一些消耗,不过应该是可以接受的范围。

  最后值得一提的是Zend_Config_Ini模块个人感觉很不错,支持数字作key,可以很方便的配置出灵活的配置文件,推荐使用之 🙂

  如果有必要,我考虑后续把我的Index.php公布出来供大家参考:)

Category: PHP / Zend
You can follow any responses to this entry through the RSS 2.0 feed. You can leave a response, or trackback from your own site.
29 Responses
  1. 800sun says:

    速度也忒快了
    你前几天还在考虑开发中使用框架,现在就两个ZendFrame的项目出来了。

    我一个稍大点的商业项目马上启动了,准备用ZendFrame,你给了不少信心。

    希望能继续看到你关于ZendFrame使用情况的相关报道。

  2. Che Dong says:

    再次邀请您参加:中国网络工程师侠客行大会(5月19/20日 杭州) » 车东[Blog^2]
    2007年5月12日更新:我邀请您参加:首届中国网络工程师侠客行大会暨中国互联网技术精英论坛(2007年5月19-20日杭州) 参加白天的讲座: 1 下载登记表; 2 填写完整后发送到: developer@alibaba-inc.com 参加晚上的交流活动(酒吧): 0 中文姓名: 1 手机: 2 通讯地址: 3 邮编: 4 发送到: developer@alibaba-inc.com + 谢谢!

    http://www.chedong.com/blog/archives/001334.html

  3. Michael says:

    [Comment ID #14422 Will Be Quoted Here]

    哈哈,说真的,这也许就是使用框架的好处,能极大提高开发效率。 我3月份思考是否使用Zf,做了多次测试,在选择继续基于PEAR开发还是完全基于全新的Zf开发中犹豫了将近一个月,于是从4月初开始决定基于Zf开发,并把之前一个开发了将近一半的项目移植过来,移植过程很快,后续的一半开发速度明显加快,截止昨天,该项目90%以上完成,进入Alpha测试。另外一个项目启动到完成不到两个礼拜,两个人开发,基于SVN管理代码,使用Zf框架,因为有了我前面那个项目的经验,所以效率更高,第二个项目是公司的客服系统,目前已经投入使用。

  4. Michael says:

    [Comment ID #14426 Will Be Quoted Here]

    恩,我研究一下,看看时间安排情况怎样然后告诉你。

    咱俩好久没有联络了,我一个朋友又回到yahoo工作了,前一段何军离开了yahoo,截至今天,我们当初3721那一拨好像就只剩下你坚守下来了:)

  5. 南半球 says:

    RE:尤其是一些类似MIS系统的BS项目,用Zf一定能事半功倍。
    这个我有些体会,确实是,我是从JAVA/JSP(J2EE)开发转到PHP开发的。 在流程比较固化的系统MIS,OA,CRM,HR之类的系统开发方面,JSP(J2EE)的模块化、分层体系还有一定的优势,在面向对象、软件工程性方面要强一些。
    但在要求效率、处理并发访问的网站开发方面,JAVA体系的系统没有PHP优势,JAVA还是很耗资源的,效率方面打折扣。在中小型网站应用开发方面,PHP的执行效率开发效率都非常高。
    J2EE跟PHP在这两方面各有优势与自己的特点,现在感觉PHP在象JAVA靠,会不会失去PHP原有的优势。
    所以也很关注你那个项目性能方面等等的参考数据,呵呵
    个人感觉象J2EE中的struts框架、MVC架构,其实挺繁杂,对中小应用反而增大了开发维护难度。感觉JAVA的唯一好处就在面向对象、代码的结构层次清晰(在web开发方面,企业应用当另说)

  6. 南半球 says:

    大型网站用JAVA开发的,我大概知道搜狐是以JAVA/JSP为主,但曾经去搜狐面试过,技术经理说JBOSS一架上去效率还是成问题的,听说他们用cache机制比较多。曾经有个朋友在搜狗做JSP开发,也只是用JSP没有用struts等架构,后来他用了用struts跟我说不好用,但他觉得hibernate(数据库持久化层的开源代码)很好。
    不过看到搜狗的论坛竟然用的是discuz,呵呵
    还听说ebay的电子商务系统是全球很大的J2EE系统;看网上的信息阿里巴巴应该也用的JAVA体系。
    网易的通行证听说是用JAVA/JSP技术,登录时也看到是.jsp后缀的。
    yahoo、新浪应该是以PHP开发为主的大型门户网站了

  7. Michael says:

    🙂 下周末咱俩一起吃顿饭聚聚吧,最近忙差不多了。

  8. 南半球 says:

    恩,太好啦!正好有问题想请教你^_^

    最近要做一个支持较大的并发量、同时在线人数很大的中型系统

  9. 南半球 says:

    上面扯了半天java,忘了说为什么要比较Java跟PHP了
    应为JAVA/J2EE很早实现了MVC的模式的开发框架,而且现在的JAVA开发几乎是框架流行的时代。

    JAVA/J2EE比较适合流程固定的应用系统开发,比如企业应用系统,电子商务系统

    个人感觉PHP的框架有些往J2EE方面靠的味道,所以说了上面一堆
    我个人做开发比较肤浅,说的肯定有不对的地方,大家指正。
    前面那个车东大侠好像对JAVA、PHP都有研究

    这里有一篇比较PHP几个流行框架的参数:
    用apache branchmark对四个框架进行了测试。
    http://www.gonefish.cn/php/cake-vs-solar-vs-symfony-vs-zend-framework

  10. dzq says:

    Michael:

    你的项目里用到了Zend_Acl模块.

    能否介绍介绍使用Zend_acl的经验?
    我们团队负责后台和权限开发的同事了解了一周zend_auth、zend_acl、zend_log模块。好像他对acl的开发还是不甚了解。

  11. Michael says:

    基本上都是参照zf的文档里面的范例来的,ACL实际就是先定义资源Resource、然后定义角色 Role、 最后定义权限 Access,使用的时候一般使用 isAllowed()方法来进行判断。

  12. Millsguo says:

    很期待你的ZF性能测试数据。

  13. Michael says:

    [Comment ID #16470 Will Be Quoted Here]

    目前几个项目都上线使用了,但是要说具体的测试数据倒是很难得到,不过对于需要静态化页面的项目来说,ZF有时也挺麻烦的,还得配置服务器的mod_rewrite策略。 详细的数据现在不知道该提供一些什么,具体的单台机器并发和响应时间等参数跟很多因素都有关系,总的来讲,目前使用ZF并没有导致系统负载变高的情况,从这个角度来看,ZF降低了团队开发的成本,总的价值还是不错的。

  14. lynn says:

    mark, 学习了

  15. Daniel says:

    请问楼主一下,

    在你的项目里,你的acl对象是如何持久化的?

    放在文本还是数据库还是用chmop扩展?

    多谢~

  16. Michael says:

    [Comment ID #16830 Will Be Quoted Here]

    之前只有一个项目用到acl,写到配置文件里面了。数据库的话需要维护到cache里面,否则性能开销会大一些。

  17. johnpupu says:

    想請問你 有關zend_db 的master/slave 的問題

    你是如何實現這個功能的
    目前我想到的方式
    可能就是在
    在fetchAll 之類的method
    前先包一層 來處理

  18. shame says:

    不得不说,Michael绝对是高高。。。。手。。。

  19. Michael says:

    [Comment ID #29953 Will Be Quoted Here]

    的确需要自己包装一下,做一个类似连接池管理的层来实现。

  20. Michael says:

    说实话,对于真正的大型应用,建议还是不要完整的使用一个框架来完成,对于一些内部系统,比如数据统计、CMS或者一些BS架构的MIS系统,用ZF这样的框架,我认为是首选。

    再有一点,也是当初在yahoo养成的习惯,如果要用一个框架,一定要对代码熟读,了解内部实现,做到一切可控,为了安全、为了性能你必须这样做。

  21. johnpupu says:

    ^^ 感謝您的建議

  22. kometo says:

    很关心你做的系统的效能咋样,页面评价生成时间有过统计吗?

    这里是我做的一个简单评估
    http://lee.kometo.com/index.php/archives/106

    我现在不敢用这种庞大的框架的了,还没加载smarty,加载了估计更恐怖。

    当然,内部系统使用框架还是很好的,毕竟效能上的要求要宽松的多

  23. Michael says:

    [Comment ID #30228 Will Be Quoted Here]

    恩,主要用在内部系统。

  24. royonimusha says:

    兄弟,你好,无意间通过搜索引擎来到你的空间,我之前也用ZF做一个项目,但有些问题,还一知半解。
    对于Controller方面,如果用户在URL中输入了一个不存在的Controller,会报Invalid controller specified (xx)的错误,是不是在这里需要做容错处理?
    ACL方面,是否将权限的对应表事先硬编码到数据库中,然后通过ACL进行匹配?

  25. Michael says:

    [Comment ID #31117 Will Be Quoted Here]

    在BaseController里面是有方法是可以得到当前访问的Action 的,对于不存在的Controller在Index.php里面也可以进行处理,记忆中可以使用Routers来处理, 具体的我还是要去翻原来的文档和代码,因为很久没有用这中架构写过东西了,这个架构适合处理那种办公室内部系统,不适合网上大规模应用,可以参考我另外的文章里面提到过的,你搜索看看。

  26. wicketmax says:

    速度咋样,我最关心性能

  27. 丕子 says:

    请问你感觉ZF执行效率如何? 我感觉慢呢

  28. Michael says:

    丕子: 请问你感觉ZF执行效率如何? 我感觉慢呢

    的确没有完美的东西,ZF稍微臃肿些,但是代码质量还是不错的,我多次提到,用ZF要根据你的项目场景来灵活使用,不要完全的硬套。

Leave a Reply

Your email address will not be published. Required fields are marked *

*
To prove you're a person (not a spam script), type the security word shown in the picture. Click on the picture to hear an audio file of the word.
Anti-spam image