SlideShare ist ein Scribd-Unternehmen logo
1 von 53
基于Symfony框架下的快速企业级应用开发 虎扑网技术部研发经理 – 洪涛 2011-9
适用对象 希望快速开发复杂应用 在种子孵化阶段 具备快速开发应用原型的能力 在早期阶段 具备平滑地进行业务升级和调整的能力 在发展阶段 具备可优化产品性能的能力 具备可平滑扩充系统架构的能力 希望产品具有可持续发展性
Why Symfony?
主流PHP框架之间的对比
如果编程语言是一条船 Java Ruby C PHP
[一条能代表Symfony+PHP的船] ?
互联网开发的最佳实践
互联网开发最佳实践之一 - 脚手架
Scaffolding(脚手架) 什么是Scaffolding 快速勾勒基本业务逻辑的工具 为什么要用Scaffolding 减少开发成本,加快开发速度 勾勒基本业务模型, 快速搭建业务逻辑 Scaffolding在互联网中的应用 Ruby on Rails Django Appfuse Symfony,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中的DRY Function 提供Lazy Load功能,调用Function无成本 强大的Helper函数库 Class 提供了面向互联网开发的抽象类 提供了继承这个抽象类的Symfony核心程序 sfWebRequest/sfWebResponse/sfFileCache…… 提供了数据库的ORM Plugin 拥有大量现成Plugin 社区活跃,鼓励开发者开发提交自己的Plugin 这两句话较难理解后面有详细的解释
“提供了继承这个抽象类的Symfony核心程序” Cache sfCache get() set() sfFileCache get() set() sfAPCCache get() set() sfMemcacheCache get() set() sfFunctionCache call()
又比如Database sfDatabase connect() getResource() shutdown() sfMySQLiDatabase connect() getResource() shutdown() sfPDODatabase connect() getResource() shutdown() myMysqlDatabase connect() getResource() shutdown() sfMySQLDatabase connect() getResource() shutdown() 实现你自己连接数据库的逻辑: 例如读写分离,垂直水平分割,审计,set names,HA等等等
Plugins of Symfony 1000多个插件 插件涵盖后台管理、表单、数据库操作、性能优化、Ajax、搜索等二十多个领域
介绍几个经典Plugin sfGuardPlugin/sfDoctrineGuardPlugin 登录,注册,权限设置以及验证 sfFormExtraPlugin 提供多个额外的Validator和WidgetForm,例如Captcha,JQueryAutocompleter,TinyMCE等 sfJqueryReloadedPlugin 在Symfony中集成Jquery stOfcPlugin 生成Flash统计图 sfAdminDashPlugin 生成后台管理页面
Plugins of hoopCHINA.com hcHTMLCompression hcXHProfPlugin Fork from elXHProfPlugin hcCKEditorPlugin hcDatabaseDebugPanelPlugin hcProtobufPlugin
互联网开发最佳实践之四 – ORM
PHP的ORM Doctrine Propel
Doctrine or Propel PHP领域最强大的两个ORM框架 谁好谁坏的争论从来没有停止过…… Ps:虎扑正在使用Doctrine
互联网开发最佳实践之五 – 开发/调试工具
Debug in Symfony Debug Toolbar Log and Debug Message Exception Message
Debug Toolbar ,[object Object]
函数调用耗时
内存占用情况
系统日志
模版的变量
模板调用关系
系统配置信息
SESSION
变量当前版本号
Log & Debug Message 可以生成日志文件
想存在其他地方?没问题 factories.yml: prod:   logger:     class:   sfFileLogger     param:       level:   err       loggers: ~ sfLogger <<Abstract>>  class:   myLogger sfFileLogger sfConsoleLogger sfNoLogger myLogger
Exception Message 详细程度不输J2ee
互联网开发最佳实践之六 – 统一开发环境
Symfony开发环境最佳实践 /opt/dev/{Devloper Name}/{product}/{branch} /opt/dev/sharing/ XHProf APC Development Server http://userA.product.branch.hc.com X:evroductranch Remote Mount NetBeans/Zend Studio/Eclipse Developers
建立统一开发环境的优势 统一硬件配置和服务配置 避免因为服务器配置原因造成的不兼容 提供更接近与生产环境的开发环境 建立分支/合并等操作速度快 App和框架/类库分离,各自升级均不互相影响 除此之外,还可以: 开启display_error,拒绝有问题代码的出现. 开启XHProf,让程序员在开发时就意识到性能问题. 限制memery_limit数量,让程序员在开发时就意识到内存问题. 限制扩展的数量,尽量使用现有的代码去解决新问题.
架构上的变化
传统框架下的整体应用架构图 LB App 1 App 2 App 3 App 4 App 5
传统架构下的一些问题 应用和应用之间任何数据调用都需要跨网络 服务器和应用没有清晰的关系,部署、运维、监控等过程复杂 容易引发单点故障 性能瓶颈容易波及整体架构
计算点 软件架构上的变化 LB App App App App App Symfony Symfony Libs ORM Plugin
整体架构上的变化 LB 计算点 计算点 计算点 计算点 计算点 ×∞ DB/Cache/MQ/File Passport/Credit/User Status/……
使用Symfony作为框架后的一些系统架构上的优势 减少应用间数据调用的成本 从Webservice/SOAP/Rest/RPC变成了本地函数调用 性能极大提高 每个计算点包含了所有的应用 扩展性极强 解决了单点故障问题 框架源文件和应用分离 部署速度快 升级方便 整体性能得到提高 提供了对计算点进行scale out和scale up的可能性
总结 Symfony与其他语言对比以及框架的优势 Scaffolding 命令行 ORM 插件 Symfony开发环境最佳实践 使用Symfony后的架构变化和好处 部署

Weitere ähnliche Inhalte

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

腾讯大讲堂58 拍拍app platform中间件解决方案简介
腾讯大讲堂58 拍拍app platform中间件解决方案简介腾讯大讲堂58 拍拍app platform中间件解决方案简介
腾讯大讲堂58 拍拍app platform中间件解决方案简介
areyouok
 
Enterprise connect
Enterprise connectEnterprise connect
Enterprise connect
thinkinlamp
 
信息系统开发平台OpenExpressApp
信息系统开发平台OpenExpressApp信息系统开发平台OpenExpressApp
信息系统开发平台OpenExpressApp
zhoujg
 
腾讯大讲堂58 拍拍app platform中间件解决方案简介
腾讯大讲堂58 拍拍app platform中间件解决方案简介腾讯大讲堂58 拍拍app platform中间件解决方案简介
腾讯大讲堂58 拍拍app platform中间件解决方案简介
George Ang
 
Top100summit前端的云时代支付宝前端平台架构 王保平
Top100summit前端的云时代支付宝前端平台架构  王保平Top100summit前端的云时代支付宝前端平台架构  王保平
Top100summit前端的云时代支付宝前端平台架构 王保平
drewz lin
 
Web development overview
Web development overviewWeb development overview
Web development overview
Wei Sun
 
在Sae上开发高性能微博应用
在Sae上开发高性能微博应用在Sae上开发高性能微博应用
在Sae上开发高性能微博应用
easychen
 
Infoship业务集成平台简介
Infoship业务集成平台简介Infoship业务集成平台简介
Infoship业务集成平台简介
yuan qixun
 
董大偉,Silverlight實務應用範例講座
董大偉,Silverlight實務應用範例講座董大偉,Silverlight實務應用範例講座
董大偉,Silverlight實務應用範例講座
Chui-Wen Chiu
 
前端编译平台简介
前端编译平台简介前端编译平台简介
前端编译平台简介
iwui
 
Our experience to start a startup
Our experience to start a startupOur experience to start a startup
Our experience to start a startup
Yenwen Feng
 
Ruby on rails部署
Ruby on rails部署Ruby on rails部署
Ruby on rails部署
Deng Peng
 
新浪云计算公开课第二期:Sae平台的灵活应用(吕毅、魏世江)
新浪云计算公开课第二期:Sae平台的灵活应用(吕毅、魏世江)新浪云计算公开课第二期:Sae平台的灵活应用(吕毅、魏世江)
新浪云计算公开课第二期:Sae平台的灵活应用(吕毅、魏世江)
锐 张
 

Ähnlich wie 基于Symfony框架下的快速企业级应用开发 (20)

腾讯大讲堂58 拍拍app platform中间件解决方案简介
腾讯大讲堂58 拍拍app platform中间件解决方案简介腾讯大讲堂58 拍拍app platform中间件解决方案简介
腾讯大讲堂58 拍拍app platform中间件解决方案简介
 
Enterprise connect
Enterprise connectEnterprise connect
Enterprise connect
 
信息系统开发平台OpenExpressApp
信息系统开发平台OpenExpressApp信息系统开发平台OpenExpressApp
信息系统开发平台OpenExpressApp
 
腾讯大讲堂58 拍拍app platform中间件解决方案简介
腾讯大讲堂58 拍拍app platform中间件解决方案简介腾讯大讲堂58 拍拍app platform中间件解决方案简介
腾讯大讲堂58 拍拍app platform中间件解决方案简介
 
Top100summit前端的云时代支付宝前端平台架构 王保平
Top100summit前端的云时代支付宝前端平台架构  王保平Top100summit前端的云时代支付宝前端平台架构  王保平
Top100summit前端的云时代支付宝前端平台架构 王保平
 
oa rapid framework課程說明會
oa rapid framework課程說明會oa rapid framework課程說明會
oa rapid framework課程說明會
 
Web development overview
Web development overviewWeb development overview
Web development overview
 
企业应用与互联网的融合
企业应用与互联网的融合企业应用与互联网的融合
企业应用与互联网的融合
 
在Sae上开发高性能微博应用
在Sae上开发高性能微博应用在Sae上开发高性能微博应用
在Sae上开发高性能微博应用
 
在Sae上开发高性能微博应用key2
在Sae上开发高性能微博应用key2在Sae上开发高性能微博应用key2
在Sae上开发高性能微博应用key2
 
Infoship业务集成平台简介
Infoship业务集成平台简介Infoship业务集成平台简介
Infoship业务集成平台简介
 
互联网持续交付整形记
互联网持续交付整形记互联网持续交付整形记
互联网持续交付整形记
 
董大偉,Silverlight實務應用範例講座
董大偉,Silverlight實務應用範例講座董大偉,Silverlight實務應用範例講座
董大偉,Silverlight實務應用範例講座
 
前端编译平台简介
前端编译平台简介前端编译平台简介
前端编译平台简介
 
Our experience to start a startup
Our experience to start a startupOur experience to start a startup
Our experience to start a startup
 
Ruby on rails部署
Ruby on rails部署Ruby on rails部署
Ruby on rails部署
 
价值中国网站开发、管理经验探讨、分享、交流
价值中国网站开发、管理经验探讨、分享、交流价值中国网站开发、管理经验探讨、分享、交流
价值中国网站开发、管理经验探讨、分享、交流
 
新浪云计算公开课第二期:Sae平台的灵活应用(吕毅、魏世江)
新浪云计算公开课第二期:Sae平台的灵活应用(吕毅、魏世江)新浪云计算公开课第二期:Sae平台的灵活应用(吕毅、魏世江)
新浪云计算公开课第二期:Sae平台的灵活应用(吕毅、魏世江)
 
F2E for Enterprise
F2E for EnterpriseF2E for Enterprise
F2E for Enterprise
 
逢甲 敏捷課程平台設計與應用
逢甲 敏捷課程平台設計與應用逢甲 敏捷課程平台設計與應用
逢甲 敏捷課程平台設計與應用
 

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

Hinweis der Redaktion

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