php设计模式及在框架设计中的经典应用

php设计模式及在框架设计中的经典应用

ID:36316901

大小:4.32 MB

页数:32页

时间:2019-05-09

php设计模式及在框架设计中的经典应用_第1页
php设计模式及在框架设计中的经典应用_第2页
php设计模式及在框架设计中的经典应用_第3页
php设计模式及在框架设计中的经典应用_第4页
php设计模式及在框架设计中的经典应用_第5页
资源描述:

《php设计模式及在框架设计中的经典应用》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、PHP设计模式及在框架设计中的经典应用韩友洪python@sina.cnhttp://www.weibo.com/django目标了解设计模式与框架给出一个可行的学习设计模式的方法介绍几种常见的设计模式Agenda设计模式简述框架简述设计模式与框架软件开发演进过程框架要解决的问题FactorySingletonRegisterAdapterProxyActiveRecordMVC什么是模式?demofor(inti=0;i<100;i++){}主谓宾我爱你计算机领域:在特定场景下、解决某一类问题的通用方法模式分类(

2、参见:POSA-1)架构模式设计模式惯用法为什么要关注设计模式?向专家学习向历史学习大型软件设计、实施必备沟通交流的语言薪水+++模式四要素模式名称(patternname)交流、标记问题(problem)场景、上下文解决方案(solution)解决方法、方案效果(consequences)模式应用的效果及使用模式应权衡的问题框架是什么?可复用的面向"对象"软件系统应用程序工具箱api,函数框架(Framework)框架解决特定领域里面具有类似问题的一组相互协作的类提供解决常见问题的通用组件为了“复用”已有的解决方

3、案为了生产效率和可维护性软件开发演进过程机器语言、汇编语言高级语言,面向过程编程OOP、设计模式、元编程框架、DSL智能组件?只描述需求、软件就给您实现了?:)程序员担当“智能”设计自己的框架可能面临的问题创建大量的复杂对象比较耗资源的对象只希望初始化一次动态处理大量的配置适应不同的数据库希望延迟初始化数据库连接日志处理性能监控.....Warning:接下来的代码供示例使用,不具备产品级可用性场景一需要在很多函数中调用数据库的操作假设对数据库的操作已经封装在一个类里面实现v0可以在函数里面调用该类function

4、foo(){$db=newDriver_DB_Mysql();}functionbar(){$db=newDriver_DB_Mysql();}问题如果Driver_DB_Mysql(改名了呢?参数变化了呢?模式一:Factory工厂模式V0.1ImplclassDB_Factory{publicstaticfunctiongetInstance(){$db=newDriver_DB_Mysql()()return$db;}}使用functionfoo(){$db=DB_Factory::getInstance()

5、}使用一致的、简单的方式来初始化复杂的对象场景二在一个业务流程中要访问数据库资源,发现多次连接数据库,消耗资源。希望只连接接数据库一次实现v0全局变量中初始化连接$db=Db_Factory::getInstance()业务访问全局变量functionfoo(){global$db;}问题badsmells?模式二:singleton单例模式+工厂模式ImplclassDB_Factory{privatestatic$_db;privatefunction__clone(){};privatefunction__c

6、onstruct(){}publicstaticfunctiongetInstance(){if(!(self::$_dbinstanceofDriver_DB_Mysql)){self::$_db=newDriver_DB_Mysql();}returnself::$_db;}}使用functionfoo(){$db=DB_Factory::getInstance();}实例化一个对象、共享连接场景三框架中需要保存一些全局的设置或类的实例,保存框架上下文实现v0使用系统$GLOBALS$GLOBALS['debu

7、g']='xxx';使用functionfoo(){if($GLOBALS['debug']){...}}问题badsmells违反职责SRP模式三:RegistryRegistry+FactoryImplclassRegistry{privatestatic$_instance;//privatestatic$_data=array();private$_data=array();//感谢一位同学指出。用实例变量还是静态变量,依赖于整体的设计。需要对应修改set,get方法...publicstaticfunct

8、iongetInstance(){....returnself::$_instance;...}publicfunctionset($key,$value){$this->_data[$key]=$value;}publicfunctionget($key){returnisset($this->_data[$key])?$this->_data[$key]

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。