SlideShare una empresa de Scribd logo
1 de 53
SACC2011
适用对象

•  希望快速开发复杂应用
   –  在种子孵化阶段
     •  具备快速开发应用原型的能力
 –  在早期阶段
     •  具备平滑地进行业务升级和调整的能力
 –  在发展阶段
     •  具备可优化产品性能的能力
     •  具备可平滑扩充系统架构的能力
•  希望产品具有可持续发展性




                            SACC2011
Why Symfony?




               SACC2011
主流PHP框架之间的对比




               SACC2011
如果编程语言是⼀一条船

•    Java
•    Ruby
•    C
•    PHP




                          SACC2011
[⼀一条能代表Symfony+PHP的船]




        ?

                        SACC2011
互联网开发的最佳实践




             SACC2011
互联网开发最佳实践之⼀一 - 脚手架




                     SACC2011
Scaffolding(脚手架)

•  什么是Scaffolding
    –  快速勾勒基本业务逻辑的工具
•  为什么要用Scaffolding
    –  减少开发成本,加快开发速度
    –  勾勒基本业务模型, 快速搭建业务逻辑
•  Scaffolding在互联网中的应用
    –  Ruby on Rails
    –  Django
    –  Appfuse
    –  Symfony,Codeigniter,Cakephp,Zend
       Framework



                                          SACC2011
在Symfony中使用Scaffolding功能




                           SACC2011
构建⼀一个CRUD页面的完整流程

•  用MySQL Workbench画数据库ER图
•  用Doctrine Export生成Yaml格式的数据库定义文件
•  根据数据库定义文件生成数据库操作类
   –  #symfony doctrine:build --all
•  根据数据库操作类生成CRUD功能
   –  #symfony doctrine:generate-admin




                                    SACC2011
你就能得到




        SACC2011
除此之外,通过命令行Symfony还可以帮你…

•  生成Project/App/Module
   –  以及他们所对应的Unit Test和Functional Test
•  安装插件
   –  或者升级现有插件
   –  甚至将要现有的程序打包成⼀一个插件
•  部署程序
•  ……




                                          SACC2011
互联网开发最佳实践之二 – 命令行工具




                  SACC2011
命令行工具用来做什么?

•  开发
   –  创建项目、模块
•  测试
   –  执行Unit Test
•  部署
   –  同步数据
   –  部署程序
   –  清空缓存
•  生产
   –  定时脚本




                             SACC2011
#php symfony




               SACC2011
互联网开发最佳实践之三 – DRY




                    SACC2011
不要重复制造轮子!




            SACC2011
可实际情况是:经常不知道去哪儿找轮子




                 SACC2011
Don’t Repeat Yourself的三个境界




                      Plugin
           Class

Function

                               SACC2011
Symfony中的DRY

•  Function
    –  提供Lazy Load功能,调用Function无成本
    –  强大的Helper函数库
                                              这两句话较难理解
•  Class                                      后面有详细的解释	
    –  提供了面向互联网开发的抽象类
    –  提供了继承这个抽象类的Symfony核心程序
      •  sfWebRequest/sfWebResponse/sfFileCache……
  –  提供了数据库的ORM
•  Plugin
    –  拥有大量现成Plugin
    –  社区活跃,鼓励开发者开发提交自己的Plugin


                                              SACC2011
“提供了继承这个抽象类的Symfony核心程序”


                           Cache




                           sfCache
                             get()
                             set()




sfFileCache   sfAPCCache       sfMemcacheCache   sfFunctionCache
    get()         get()              get()            call()
    set()         set()              set()

                                                 SACC2011
又比如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
Plugins of Symfony

•  1000多个插件
•  插件涵盖后台管理、表单、数据库操作、性能优化、Ajax、
   搜索等二十多个领域




                               SACC2011
介绍几个经典Plugin

•  sfGuardPlugin/sfDoctrineGuardPlugin
    –  登录,注册,权限设置以及验证
•  sfFormExtraPlugin
    –  提供多个额外的Validator和WidgetForm,例如
       Captcha,JQueryAutocompleter,TinyMCE等
•  sfJqueryReloadedPlugin
    –  在Symfony中集成Jquery
•  stOfcPlugin
    –  生成Flash统计图
•  sfAdminDashPlugin
    –  生成后台管理页面


                                              SACC2011
Plugins of hoopCHINA.com

•  hcHTMLCompression
•  hcXHProfPlugin
    –  Fork from elXHProfPlugin
•  hcCKEditorPlugin
•  hcDatabaseDebugPanelPlugin
•  hcProtobufPlugin




                                          SACC2011
互联网开发最佳实践之四 – ORM




                    SACC2011
PHP的ORM


•  Doctrine




•  Propel




                        SACC2011
Doctrine or Propel

•  PHP领域最强大的两个ORM框架
•  谁好谁坏的争论从来没有停止过……




 Ps:虎扑正在使用Doctrine


                                 SACC2011
互联网开发最佳实践之五 – 开发/调试工具




                   SACC2011
Debug in Symfony

•  Debug Toolbar
•  Log and Debug Message
•  Exception Message




                                     SACC2011
Debug Toolbar




                              •  数据库操作耗时
                          •  函数调用耗时
                  •  内存占用情况
             •  系统日志
         •  模版的变量
         •  模板调用关系
    •  系统配置信息
    •  SESSION
    •  变量
当前版本号

                                SACC2011
Log  Debug Message




                      可以生成
                      日志文件




                      SACC2011
想存在其他地方?没问题

factories.yml:
                                             sfLogger
                                           Abstract
prod:
 logger:
           myLogger
   class: sfFileLogger
   param:                sfFileLogger
    level: err
    loggers: ~                sfConsoleLogger


                                        sfNoLogger


                                                     myLogger


                                                SACC2011
Exception Message




                    详细程度
                    不输J2ee




                    SACC2011
互联网开发最佳实践之六 – 统⼀一开发环境




                   SACC2011
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
建立统⼀一开发环境的优势

•  统⼀一硬件配置和服务配置
    –  避免因为服务器配置原因造成的不兼容
•  提供更接近与生产环境的开发环境
•  建立分支/合并等操作速度快
•  App和框架/类库分离,各自升级均不互相影响
•  除此之外,还可以:
    –  开启display_error,拒绝有问题代码的出现.
    –  开启XHProf,让程序员在开发时就意识到性能问题.
    –  限制memery_limit数量,让程序员在开发时就意识到内存问题.
    –  限制扩展的数量,尽量使用现有的代码去解决新问题.




                                 SACC2011
架构上的变化




         SACC2011
传统框架下的整体应用架构图



                LB




App 1           App 2           App 3




        App 4           App 5




                                SACC2011
传统架构下的⼀一些问题

•    应用和应用之间任何数据调用都需要跨网络
•    服务器和应用没有清晰的关系,部署、运维、监控等过程复杂
•    容易引发单点故障
•    性能瓶颈容易波及整体架构




                          SACC2011
软件架构上的变化



                          LB



计算点

App           App         App     App     App


Symfony
          Symfony Libs          ORM     Plugin




                                         SACC2011
整体架构上的变化


                  LB




计算点   计算点         计算点          计算点     计算点

                                               ×∞
      DB/Cache/MQ/File
      Passport/Credit/User Status/……



                                             SACC2011
使用Symfony作为框架后的⼀一些系统架构上的优势

•  减少应用间数据调用的成本
   –  从Webservice/SOAP/Rest/RPC变成了本地函数调用
   –  性能极大提高
•  每个计算点包含了所有的应用
   –  扩展性极强
   –  解决了单点故障问题
•  框架源文件和应用分离
   –  部署速度快
   –  升级方便
•  整体性能得到提高
   –  提供了对计算点进行scale out和scale up的可能性


                                    SACC2011
总结

•    Symfony与其他语言对比以及框架的优势
•    Scaffolding
•    命令行
•    ORM
•    插件
•    Symfony开发环境最佳实践
•    使用Symfony后的架构变化和好处
•    部署




                             SACC2011
抛砖引玉




       SACC2011
你讲的不错,但我回家后从哪儿入手呢?




                 SACC2011
学习资料

•  Symfony官方教程(推荐)
    –  http://www.symfony-project.org/doc/1_4/
•  看源代码
    –  真的,我不是在忽悠你
       •  从Symfony源代码中学习
       •  从Symfony的插件库中学习更多




                                                 SACC2011
⼀一些有用的工具和网址

•  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
对于希望迁移到Symfony框架的团队的⼀一些建议

•  Symfony的学习曲线较陡峭
    – 需要做好2-6个月的学习时间
•  开发上:
    – 先从小的网站和应用入手,积累一些开发经验.
    – 不要重复制造轮子
    – 造出来要分享,发扬开源精神
    – 通过逐步替换单个功能点或页面,最终完成改造




                              SACC2011
展望-Symfony2

•  今年8月已经发布正式版
•  特性
   –  基于php5.3重写,支持namespace,目录结构更精简
   –  所有代码都是松耦合的,包括核心代码
   –  默认使用Doctrine2,支持Mongodb
•  所以
   –  开发速度快
   –  程序速度快
•  但是
   –  新的东西都不太稳定…
•  不过
   –  许多组织都表示会使用Symfony2,例如phpbb

                                  SACC2011
还有问题?

•  Mail
    –  公司:hongtao@hoopchina.com
    –  个人:scourgen@gmail.com
•  QQ
    –  2468630
•  MSN
    –  scourgen@hotmail.com
•  新浪微博
    –  @虎扑网洪涛
•  Twitter
    –  @scourgen


                                  SACC2011
谢谢




     SACC2011

Más contenido relacionado

La actualidad más candente

Phalcon the fastest php framework 阿土伯
Phalcon   the fastest php framework 阿土伯Phalcon   the fastest php framework 阿土伯
Phalcon the fastest php framework 阿土伯
Hash Lin
 
从无阻塞并行脚本加载(Lab.js)到浏览器消息模型
从无阻塞并行脚本加载(Lab.js)到浏览器消息模型从无阻塞并行脚本加载(Lab.js)到浏览器消息模型
从无阻塞并行脚本加载(Lab.js)到浏览器消息模型
Jackson Tian
 

La actualidad más candente (20)

rebar erlang
rebar erlangrebar erlang
rebar erlang
 
[PHPConf Taiwan 2015] 跟著 Laravel 5.1 一起成為更好的 PHP 開發者
[PHPConf Taiwan 2015] 跟著 Laravel 5.1 一起成為更好的 PHP 開發者[PHPConf Taiwan 2015] 跟著 Laravel 5.1 一起成為更好的 PHP 開發者
[PHPConf Taiwan 2015] 跟著 Laravel 5.1 一起成為更好的 PHP 開發者
 
課程簡介
課程簡介課程簡介
課程簡介
 
LaravelConf Taiwan 2017 單頁面應用與前後端分離開發
LaravelConf Taiwan 2017 單頁面應用與前後端分離開發LaravelConf Taiwan 2017 單頁面應用與前後端分離開發
LaravelConf Taiwan 2017 單頁面應用與前後端分離開發
 
使用者認證
使用者認證使用者認證
使用者認證
 
PHP 語法基礎與物件導向
PHP 語法基礎與物件導向PHP 語法基礎與物件導向
PHP 語法基礎與物件導向
 
Why to choose laravel framework
Why to choose laravel frameworkWhy to choose laravel framework
Why to choose laravel framework
 
How to upgrade_ror3_to_ror4
How to upgrade_ror3_to_ror4How to upgrade_ror3_to_ror4
How to upgrade_ror3_to_ror4
 
工作坊簡介
工作坊簡介工作坊簡介
工作坊簡介
 
Entity Framework實戰
Entity Framework實戰Entity Framework實戰
Entity Framework實戰
 
驗證與訊息
驗證與訊息驗證與訊息
驗證與訊息
 
使用 Controller
使用 Controller使用 Controller
使用 Controller
 
應用程式佈署
應用程式佈署應用程式佈署
應用程式佈署
 
成為全能 php 攻城獅
成為全能 php 攻城獅成為全能 php 攻城獅
成為全能 php 攻城獅
 
工作坊簡介
工作坊簡介工作坊簡介
工作坊簡介
 
View 與 Blade 樣板引擎
View 與 Blade 樣板引擎View 與 Blade 樣板引擎
View 與 Blade 樣板引擎
 
Phalcon the fastest php framework 阿土伯
Phalcon   the fastest php framework 阿土伯Phalcon   the fastest php framework 阿土伯
Phalcon the fastest php framework 阿土伯
 
凌波微步:wagon + VS Code 的輕功哲學
凌波微步:wagon + VS Code 的輕功哲學凌波微步:wagon + VS Code 的輕功哲學
凌波微步:wagon + VS Code 的輕功哲學
 
Laravel - 系統全攻略(續)
Laravel - 系統全攻略(續)Laravel - 系統全攻略(續)
Laravel - 系統全攻略(續)
 
从无阻塞并行脚本加载(Lab.js)到浏览器消息模型
从无阻塞并行脚本加载(Lab.js)到浏览器消息模型从无阻塞并行脚本加载(Lab.js)到浏览器消息模型
从无阻塞并行脚本加载(Lab.js)到浏览器消息模型
 

Destacado (7)

Web开发与运维安全浅见
Web开发与运维安全浅见Web开发与运维安全浅见
Web开发与运维安全浅见
 
Taobao base
Taobao baseTaobao base
Taobao base
 
百度自动化运维中的关系管理
百度自动化运维中的关系管理百度自动化运维中的关系管理
百度自动化运维中的关系管理
 
开放平台的资源分配与多级缓存体系的优化
开放平台的资源分配与多级缓存体系的优化开放平台的资源分配与多级缓存体系的优化
开放平台的资源分配与多级缓存体系的优化
 
Java program in_action
Java program in_actionJava program in_action
Java program in_action
 
Php应用程序常见安全问题解析
Php应用程序常见安全问题解析Php应用程序常见安全问题解析
Php应用程序常见安全问题解析
 
The simplethebeautiful
The simplethebeautifulThe simplethebeautiful
The simplethebeautiful
 

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

从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰
从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰
从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰
Scourgen Hong
 
Javascript primer plus
Javascript primer plusJavascript primer plus
Javascript primer plus
Dongxu Yao
 
自动化运维管理
自动化运维管理自动化运维管理
自动化运维管理
frankwsj
 
Build desktop app_by_xulrunner
Build desktop app_by_xulrunnerBuild desktop app_by_xulrunner
Build desktop app_by_xulrunner
Rack Lin
 
跟我一起學 CakePHP
跟我一起學 CakePHP跟我一起學 CakePHP
跟我一起學 CakePHP
Ray Wei
 
Nodejs & NAE
Nodejs & NAENodejs & NAE
Nodejs & NAE
q3boy
 
Install Oracle11g For Aix 5 L
Install Oracle11g For Aix 5 LInstall Oracle11g For Aix 5 L
Install Oracle11g For Aix 5 L
heima911
 
美团前端架构简介
美团前端架构简介美团前端架构简介
美团前端架构简介
pan weizeng
 

Similar a 基于Symfony框架下的快速企业级应用开发 (20)

从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰
从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰
从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰
 
Javascript primer plus
Javascript primer plusJavascript primer plus
Javascript primer plus
 
Phalcon phpconftw2012
Phalcon phpconftw2012Phalcon phpconftw2012
Phalcon phpconftw2012
 
自动化运维管理
自动化运维管理自动化运维管理
自动化运维管理
 
从运维系统的开发谈安全架构设计
从运维系统的开发谈安全架构设计从运维系统的开发谈安全架构设计
从运维系统的开发谈安全架构设计
 
Build desktop app_by_xulrunner
Build desktop app_by_xulrunnerBuild desktop app_by_xulrunner
Build desktop app_by_xulrunner
 
SQL Server 資料庫版本控管
SQL Server 資料庫版本控管SQL Server 資料庫版本控管
SQL Server 資料庫版本控管
 
合久必分,分久必合
合久必分,分久必合合久必分,分久必合
合久必分,分久必合
 
开源应用日志收集系统
开源应用日志收集系统开源应用日志收集系统
开源应用日志收集系统
 
Workflow Overview
Workflow OverviewWorkflow Overview
Workflow Overview
 
跟我一起學 CakePHP
跟我一起學 CakePHP跟我一起學 CakePHP
跟我一起學 CakePHP
 
CKAN 技術介紹 (基礎篇)
CKAN 技術介紹 (基礎篇)CKAN 技術介紹 (基礎篇)
CKAN 技術介紹 (基礎篇)
 
Nodejs & NAE
Nodejs & NAENodejs & NAE
Nodejs & NAE
 
Asp.net mvc 6 新功能初探
Asp.net mvc 6 新功能初探Asp.net mvc 6 新功能初探
Asp.net mvc 6 新功能初探
 
Install Oracle11g For Aix 5 L
Install Oracle11g For Aix 5 LInstall Oracle11g For Aix 5 L
Install Oracle11g For Aix 5 L
 
美团前端架构简介
美团前端架构简介美团前端架构简介
美团前端架构简介
 
未来网络技术发展探梦 - 开篇
未来网络技术发展探梦 - 开篇未来网络技术发展探梦 - 开篇
未来网络技术发展探梦 - 开篇
 
.NET 7 家族新成員: Microsoft Orleans v7
.NET 7 家族新成員:Microsoft Orleans v7.NET 7 家族新成員:Microsoft Orleans v7
.NET 7 家族新成員: Microsoft Orleans v7
 
Phalcon2014 Startup
Phalcon2014 StartupPhalcon2014 Startup
Phalcon2014 Startup
 
Retrive&rank
Retrive&rankRetrive&rank
Retrive&rank
 

Más de mysqlops

Más de mysqlops (20)

Oracle数据库分析函数详解
Oracle数据库分析函数详解Oracle数据库分析函数详解
Oracle数据库分析函数详解
 
Percona Live 2012PPT:mysql-security-privileges-and-user-management
Percona Live 2012PPT:mysql-security-privileges-and-user-managementPercona Live 2012PPT:mysql-security-privileges-and-user-management
Percona Live 2012PPT:mysql-security-privileges-and-user-management
 
Percona Live 2012PPT: introduction-to-mysql-replication
Percona Live 2012PPT: introduction-to-mysql-replicationPercona Live 2012PPT: introduction-to-mysql-replication
Percona Live 2012PPT: introduction-to-mysql-replication
 
Percona Live 2012PPT: MySQL Cluster And NDB Cluster
Percona Live 2012PPT: MySQL Cluster And NDB ClusterPercona Live 2012PPT: MySQL Cluster And NDB Cluster
Percona Live 2012PPT: MySQL Cluster And NDB Cluster
 
Percona Live 2012PPT: MySQL Query optimization
Percona Live 2012PPT: MySQL Query optimizationPercona Live 2012PPT: MySQL Query optimization
Percona Live 2012PPT: MySQL Query optimization
 
Pldc2012 innodb architecture and internals
Pldc2012 innodb architecture and internalsPldc2012 innodb architecture and internals
Pldc2012 innodb architecture and internals
 
DBA新人的述职报告
DBA新人的述职报告DBA新人的述职报告
DBA新人的述职报告
 
分布式爬虫
分布式爬虫分布式爬虫
分布式爬虫
 
MySQL应用优化实践
MySQL应用优化实践MySQL应用优化实践
MySQL应用优化实践
 
eBay EDW元数据管理及应用
eBay EDW元数据管理及应用eBay EDW元数据管理及应用
eBay EDW元数据管理及应用
 
基于协程的网络开发框架的设计与实现
基于协程的网络开发框架的设计与实现基于协程的网络开发框架的设计与实现
基于协程的网络开发框架的设计与实现
 
eBay基于Hadoop平台的用户邮件数据分析
eBay基于Hadoop平台的用户邮件数据分析eBay基于Hadoop平台的用户邮件数据分析
eBay基于Hadoop平台的用户邮件数据分析
 
对MySQL DBA的一些思考
对MySQL DBA的一些思考对MySQL DBA的一些思考
对MySQL DBA的一些思考
 
QQ聊天系统后台架构的演化与启示
QQ聊天系统后台架构的演化与启示QQ聊天系统后台架构的演化与启示
QQ聊天系统后台架构的演化与启示
 
腾讯即时聊天IM1.4亿在线背后的故事
腾讯即时聊天IM1.4亿在线背后的故事腾讯即时聊天IM1.4亿在线背后的故事
腾讯即时聊天IM1.4亿在线背后的故事
 
分布式存储与TDDL
分布式存储与TDDL分布式存储与TDDL
分布式存储与TDDL
 
MySQL数据库生产环境维护
MySQL数据库生产环境维护MySQL数据库生产环境维护
MySQL数据库生产环境维护
 
Memcached
MemcachedMemcached
Memcached
 
DevOPS
DevOPSDevOPS
DevOPS
 
MySQL数据库开发的三十六条军规
MySQL数据库开发的三十六条军规MySQL数据库开发的三十六条军规
MySQL数据库开发的三十六条军规
 

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