基于Symfony框架下的快速企业级应用开发虎扑网技术部研发经理 – 洪涛2011-9
适用对象希望快速开发复杂应用在种子孵化阶段具备快速开发应用原型的能力在早期阶段具备平滑地进行业务升级和调整的能力在发展阶段具备可优化产品性能的能力具备可平滑扩充系统架构的能力希望产品具有可持续发展性
Why Symfony?
主流PHP框架之间的对比
如果编程语言是一条船JavaRubyCPHP
[一条能代表Symfony+PHP的船]?
互联网开发的最佳实践
互联网开发最佳实践之一 - 脚手架
Scaffolding(脚手架)什么是Scaffolding快速勾勒基本业务逻辑的工具为什么要用Scaffolding减少开发成本,加快开发速度勾勒基本业务模型, 快速搭建业务逻辑Scaffolding在互联网中的应用Ruby on RailsDjangoAppfuseSymfony,Codeigniter,Cakephp,Zend Framework
在Symfony中使用Scaffolding功能
构建一个CRUD页面的完整流程用MySQL Workbench画数据库ER图用Doctrine Export生成Yaml格式的数据库定义文件根据数据库定义文件生成数据库操作类#symfony doctrine:build --all根据数据库操作类生成CRUD功能#symfony doctrine:generate-admin
你就能得到
除此之外,通过命令行Symfony还可以帮你…生成Project/App/Module以及他们所对应的Unit Test和Functional Test安装插件或者升级现有插件甚至将要现有的程序打包成一个插件部署程序……
互联网开发最佳实践之二 – 命令行工具
命令行工具用来做什么?开发创建项目、模块测试执行Unit Test部署同步数据部署程序清空缓存生产定时脚本
#php symfony
互联网开发最佳实践之三 – DRY
不要重复制造轮子!
可实际情况是:经常不知道去哪儿找轮子
Don’t Repeat Yourself的三个境界
Symfony中的DRYFunction提供Lazy Load功能,调用Function无成本强大的Helper函数库Class提供了面向互联网开发的抽象类提供了继承这个抽象类的Symfony核心程序sfWebRequest/sfWebResponse/sfFileCache……提供了数据库的ORMPlugin拥有大量现成Plugin社区活跃,鼓励开发者开发提交自己的Plugin这两句话较难理解后面有详细的解释
“提供了继承这个抽象类的Symfony核心程序”CachesfCacheget()set()sfFileCacheget()set()sfAPCCacheget()set()sfMemcacheCacheget()set()sfFunctionCachecall()
又比如DatabasesfDatabaseconnect()getResource()shutdown()sfMySQLiDatabaseconnect()getResource()shutdown()sfPDODatabaseconnect()getResource()shutdown()myMysqlDatabaseconnect()getResource()shutdown()sfMySQLDatabaseconnect()getResource()shutdown()实现你自己连接数据库的逻辑:例如读写分离,垂直水平分割,审计,set names,HA等等等
Plugins of Symfony1000多个插件插件涵盖后台管理、表单、数据库操作、性能优化、Ajax、搜索等二十多个领域
介绍几个经典PluginsfGuardPlugin/sfDoctrineGuardPlugin登录,注册,权限设置以及验证sfFormExtraPlugin提供多个额外的Validator和WidgetForm,例如Captcha,JQueryAutocompleter,TinyMCE等sfJqueryReloadedPlugin在Symfony中集成JquerystOfcPlugin生成Flash统计图sfAdminDashPlugin生成后台管理页面
Plugins of hoopCHINA.comhcHTMLCompressionhcXHProfPluginFork from elXHProfPluginhcCKEditorPluginhcDatabaseDebugPanelPluginhcProtobufPlugin
互联网开发最佳实践之四 – ORM
PHP的ORMDoctrinePropel
Doctrine or PropelPHP领域最强大的两个ORM框架谁好谁坏的争论从来没有停止过……Ps:虎扑正在使用Doctrine
互联网开发最佳实践之五 – 开发/调试工具
Debug in SymfonyDebug ToolbarLog and Debug MessageException Message
Debug Toolbar数据库操作耗时
函数调用耗时
内存占用情况
系统日志
模版的变量
模板调用关系
系统配置信息
SESSION
变量当前版本号
Log & Debug Message可以生成日志文件
想存在其他地方?没问题factories.yml:prod:  logger:    class:   sfFileLogger    param:      level:   err      loggers: ~sfLogger<<Abstract>> class:   myLoggersfFileLoggersfConsoleLoggersfNoLoggermyLogger
Exception Message详细程度不输J2ee
互联网开发最佳实践之六 – 统一开发环境
Symfony开发环境最佳实践/opt/dev/{Devloper Name}/{product}/{branch}/opt/dev/sharing/XHProfAPCDevelopment Serverhttp://userA.product.branch.hc.comX:\dev\product\branchRemote MountNetBeans/Zend Studio/EclipseDevelopers
建立统一开发环境的优势统一硬件配置和服务配置避免因为服务器配置原因造成的不兼容提供更接近与生产环境的开发环境建立分支/合并等操作速度快App和框架/类库分离,各自升级均不互相影响除此之外,还可以:开启display_error,拒绝有问题代码的出现.开启XHProf,让程序员在开发时就意识到性能问题.限制memery_limit数量,让程序员在开发时就意识到内存问题.限制扩展的数量,尽量使用现有的代码去解决新问题.
架构上的变化
传统框架下的整体应用架构图LBApp 1App 2App 3App 4App 5
传统架构下的一些问题应用和应用之间任何数据调用都需要跨网络服务器和应用没有清晰的关系,部署、运维、监控等过程复杂容易引发单点故障性能瓶颈容易波及整体架构
计算点软件架构上的变化LBAppAppAppAppAppSymfonySymfony LibsORMPlugin
整体架构上的变化LB计算点计算点计算点计算点计算点×∞DB/Cache/MQ/FilePassport/Credit/User Status/……
使用Symfony作为框架后的一些系统架构上的优势减少应用间数据调用的成本从Webservice/SOAP/Rest/RPC变成了本地函数调用性能极大提高每个计算点包含了所有的应用扩展性极强解决了单点故障问题框架源文件和应用分离部署速度快升级方便整体性能得到提高提供了对计算点进行scale out和scale up的可能性
总结Symfony与其他语言对比以及框架的优势Scaffolding命令行ORM插件Symfony开发环境最佳实践使用Symfony后的架构变化和好处部署

基于Symfony框架下的快速企业级应用开发

Editor's Notes

  • #3 没有写PHP限制因为java和.net公司学习成本低
  • #5 至于其他主流框架的优劣我不做评价,PHP开发领域的框架多如牛毛,甚至有一段时间在社区里有传言不自己写一个框架就不算高级PHP程序员之类的话。ZF,Codeigniter听完我的介绍后大家会有自己的看法。
  • #6 Java-企业级,体积笨重,载重量很大,驾驶起来没有多大趣味Ruby-很时尚,驾驶起来很有趣,但你不太容易搞清楚里面到底是什么C-可以毁天灭地,扭转乾坤,但建造成本大,驾驭起来不是那么容易的PHP-简单,实用,稳定但是功能和性能不高,有上千年的历史,驾驶起来比较有乐趣,每个人都会用
  • #7 拥有J2EE核心模式之一的Intercepting Filter(拦截过滤器)Intercepting Filter模式可以用来做认证,Session管理,HTML压缩,I18NSSH的Factory模式,IOC有其灵活性和强大之处,但Symfony拥有简便快捷的配置式Factory拥有ROR,Python的CommandLine和Scaffold Generator除了语言之外,Symfony集成了互联网开发方面的众多最佳实践
  • #8 什么是最佳实践:最佳实践简单的说就是按照别人的成功经验去做一件事情。开发/测试/生产环境配置分离CSRF表单验证MVCORM脚手架URL Router多级CacheI18N集成测试环境Debug Tool/Exception LogsFilter
  • #17 红色边框框起来的是虎扑自己开发的一些Plugin和Task承接:重复制造轮子
  • #20 在项目进展到早期阶段和发展阶段,往往由于各种原因,内部的外部的内部的:代码混乱,业务需求紧张以后再改外部的:人事变动观念上的:Dirty and Quick
  • #21 Function:将经常用到的代码封装成函数Class:将业务逻辑抽象成一个类Product:将经常用到的模块/函数/类封装成一个产品,可以在被其他产品所包括
  • #22 Plugin:用户注册,验证,登录. Ajax,Captcha,后文会介绍一些常用的PluginPlugin:开源的精神,良好的开端
  • #29 这两个ORM框架是PHP领域中最成熟的两个ORM系统,功能强大,更新速度也快Symfony都支持
  • #51 但Symfony的学习资料很丰富但一般都是英文的而且只有你没认真读的,没有它没教的