Más contenido relacionado
La actualidad más candente (20)
Similar a 基于Symfony框架下的快速企业级应用开发 (20)
基于Symfony框架下的快速企业级应用开发
- 2. 适用对象
• 希望快速开发复杂应用
– 在种子孵化阶段
• 具备快速开发应用原型的能力
– 在早期阶段
• 具备平滑地进行业务升级和调整的能力
– 在发展阶段
• 具备可优化产品性能的能力
• 具备可平滑扩充系统架构的能力
• 希望产品具有可持续发展性
SACC2011
- 9. Scaffolding(脚手架)
• 什么是Scaffolding
– 快速勾勒基本业务逻辑的工具
• 为什么要用Scaffolding
– 减少开发成本,加快开发速度
– 勾勒基本业务模型, 快速搭建业务逻辑
• Scaffolding在互联网中的应用
– Ruby on Rails
– Django
– Appfuse
– Symfony,Codeigniter,Cakephp,Zend
Framework
SACC2011
- 15. 命令行工具用来做什么?
• 开发
– 创建项目、模块
• 测试
– 执行Unit Test
• 部署
– 同步数据
– 部署程序
– 清空缓存
• 生产
– 定时脚本
SACC2011
- 21. Symfony中的DRY
• Function
– 提供Lazy Load功能,调用Function无成本
– 强大的Helper函数库
这两句话较难理解
• Class 后面有详细的解释
– 提供了面向互联网开发的抽象类
– 提供了继承这个抽象类的Symfony核心程序
• sfWebRequest/sfWebResponse/sfFileCache……
– 提供了数据库的ORM
• Plugin
– 拥有大量现成Plugin
– 社区活跃,鼓励开发者开发提交自己的Plugin
SACC2011
- 22. “提供了继承这个抽象类的Symfony核心程序”
Cache
sfCache
get()
set()
sfFileCache sfAPCCache sfMemcacheCache sfFunctionCache
get() get() get() call()
set() set() set()
SACC2011
- 23. 又比如Database
sfDatabase
connect()
getResource()
shutdown()
sfMySQLDatabase sfMySQLiDatabase sfPDODatabase myMysqlDatabase
connect() connect() connect() connect()
getResource() getResource() getResource() getResource()
shutdown() shutdown() shutdown() shutdown()
实现你自己连接数据库的逻辑:
例如读写分离,垂直水平分割,审
计,set names,HA等等等
SACC2011
- 25. 介绍几个经典Plugin
• sfGuardPlugin/sfDoctrineGuardPlugin
– 登录,注册,权限设置以及验证
• sfFormExtraPlugin
– 提供多个额外的Validator和WidgetForm,例如
Captcha,JQueryAutocompleter,TinyMCE等
• sfJqueryReloadedPlugin
– 在Symfony中集成Jquery
• stOfcPlugin
– 生成Flash统计图
• sfAdminDashPlugin
– 生成后台管理页面
SACC2011
- 26. Plugins of hoopCHINA.com
• hcHTMLCompression
• hcXHProfPlugin
– Fork from elXHProfPlugin
• hcCKEditorPlugin
• hcDatabaseDebugPanelPlugin
• hcProtobufPlugin
SACC2011
- 32. Debug Toolbar
• 数据库操作耗时
• 函数调用耗时
• 内存占用情况
• 系统日志
• 模版的变量
• 模板调用关系
• 系统配置信息
• SESSION
• 变量
当前版本号
SACC2011
- 34. 想存在其他地方?没问题
factories.yml:
sfLogger
Abstract
prod:
logger:
myLogger
class: sfFileLogger
param: sfFileLogger
level: err
loggers: ~ sfConsoleLogger
sfNoLogger
myLogger
SACC2011
- 37. Symfony开发环境最佳实践
/opt/dev/{Devloper Name}/{product}/{branch}
/opt/dev/sharing/
XHProf
APC
Development Server
http://userA.product.branch.hc.com
X:devproductbranch
Remote Mount
NetBeans/Zend Studio/Eclipse
Developers
SACC2011
- 38. 建立统⼀一开发环境的优势
• 统⼀一硬件配置和服务配置
– 避免因为服务器配置原因造成的不兼容
• 提供更接近与生产环境的开发环境
• 建立分支/合并等操作速度快
• App和框架/类库分离,各自升级均不互相影响
• 除此之外,还可以:
– 开启display_error,拒绝有问题代码的出现.
– 开启XHProf,让程序员在开发时就意识到性能问题.
– 限制memery_limit数量,让程序员在开发时就意识到内存问题.
– 限制扩展的数量,尽量使用现有的代码去解决新问题.
SACC2011
- 41. 传统架构下的⼀一些问题
• 应用和应用之间任何数据调用都需要跨网络
• 服务器和应用没有清晰的关系,部署、运维、监控等过程复杂
• 容易引发单点故障
• 性能瓶颈容易波及整体架构
SACC2011
- 42. 软件架构上的变化
LB
计算点
App App App App App
Symfony
Symfony Libs ORM Plugin
SACC2011
- 43. 整体架构上的变化
LB
计算点 计算点 计算点 计算点 计算点
×∞
DB/Cache/MQ/File
Passport/Credit/User Status/……
SACC2011
- 44. 使用Symfony作为框架后的⼀一些系统架构上的优势
• 减少应用间数据调用的成本
– 从Webservice/SOAP/Rest/RPC变成了本地函数调用
– 性能极大提高
• 每个计算点包含了所有的应用
– 扩展性极强
– 解决了单点故障问题
• 框架源文件和应用分离
– 部署速度快
– 升级方便
• 整体性能得到提高
– 提供了对计算点进行scale out和scale up的可能性
SACC2011
- 45. 总结
• Symfony与其他语言对比以及框架的优势
• Scaffolding
• 命令行
• ORM
• 插件
• Symfony开发环境最佳实践
• 使用Symfony后的架构变化和好处
• 部署
SACC2011
- 48. 学习资料
• Symfony官方教程(推荐)
– http://www.symfony-project.org/doc/1_4/
• 看源代码
– 真的,我不是在忽悠你
• 从Symfony源代码中学习
• 从Symfony的插件库中学习更多
SACC2011
- 49. ⼀一些有用的工具和网址
• Doctrine Export
– http://code.google.com/p/mysql-workbench-doctrine-plugin/
• Symfony Snippets
– http://snippets.symfony-project.org/
• ORM Designer
– http://www.orm-designer.com/symfony
SACC2011
- 51. 展望-Symfony2
• 今年8月已经发布正式版
• 特性
– 基于php5.3重写,支持namespace,目录结构更精简
– 所有代码都是松耦合的,包括核心代码
– 默认使用Doctrine2,支持Mongodb
• 所以
– 开发速度快
– 程序速度快
• 但是
– 新的东西都不太稳定…
• 不过
– 许多组织都表示会使用Symfony2,例如phpbb
SACC2011
- 52. 还有问题?
• Mail
– 公司:hongtao@hoopchina.com
– 个人:scourgen@gmail.com
• QQ
– 2468630
• MSN
– scourgen@hotmail.com
• 新浪微博
– @虎扑网洪涛
• Twitter
– @scourgen
SACC2011