设为首页 收藏本站
查看: 1281|回复: 0

[经验分享] [php]架构模式回顾

[复制链接]

尚未签到

发表于 2017-3-27 11:13:02 | 显示全部楼层 |阅读模式
  一直想把以前学过的知识写到博客上,由于太懒,时间久了也就忘得差不多了。这次国庆回家有时间能写点了,也算是给自己复习吧。对于编码写业务,我更喜欢花时间在架构设计上。我在这里面学到了比较多的东西,遂作企业架构模式笔记以加深印象。
  

  PHP是一种为Web开发而设计的语言,在PHP5之后,PHP不断完善对面向对象的支持而且也提供了新的特性,那么这样的话PHP就能像JAVA那样享受设计模式带来的好处。

  模式便是特定环境下同类问题的一种解决方案。如果模式是对问题的定义和解决方案的描述,那么答案很清楚,即模式可以帮助解决具有共性的问题。当然,使用模式还能带来很多的好处。
  作为从事开发Web方面的程序员来说,总是能遇到很多相同问题。比如如何处理一个请求?如何处理对数据的持久化?如何决定实现视图?等等这类常见的问题。随着时间的推移和经验的积累,我们总会很流利或者困难地回答这些问题,并总结出一些非正式、可在项目中重复使用的解决方案,而这些解决方案就是设计模式了。
   下面几个是需要用到的设计模式:
1、注册表:该模式用于使数据在进程中的所有的类都有效,即在应用中的任何一个模块都能访问到注册表里变量的值。注册表能够使数据跨会话甚至跨应用。
2、前端控制器:在规模较大的系统中,该模式可以用于尽可能灵活地管理各种不同的命令和视图。
3、应用控制器:创建一个类来管理视图逻辑和命令选择。(注意和前端控制器描述的区别)
4、模板视图:创建模板来处理和现实用户界面,在模板中加入标签,动态改变标签内容,减少视图和业务之间的耦合。
5、页面控制器:能满足和前端控制器的一样的需求,但灵活性较小,可以使用这种模式管理请求和处理页面逻辑。
6、事务脚本:用“过程式”的代码实现业务逻辑,比较不好维护。
7、领域模型:与事务脚本相反,它可以为业务参与者和过程构建基于对象的模型。

  

  应用程序和层:上面的几个模式都是用在应用中不同的层。层是独立工作的,就像一个类,给司其职,但层又比较不那么严格。下图为分工明确的各个层(MVC)。

DSC0000.jpg

  在实际的应用中,图中所示的结构并不是一成不变。灵活性和可重用性才是设计的原则。
  

  各层的功能和介绍:
视图层:用户所能看到的交互界面,主要完成显示返回结果的显示和完成提交用户请求到系统。
  命令和控制层:处理用户的请求。它能委托业务逻辑层完成请求,然后按业务逻辑层返回的处理结果选取适当的视图来显示给用户。视图层和该层有可以称为表现层。但要注意的是,视图显示,命令转发,业务处理需要分开来。
  业务逻辑层:处理业务逻辑。
  持久化层:主要的是保存和获取数据。
  划分系统是为了解耦,通过分离业务逻辑层与视图层,当需要添加新的图形界面接口的时候,只需要改动系统中的一小部分即可。这里来举个例子吧:你现在已经有一个开发好了的Web系统,你现在需要开发手机或者其他手持设备能够访问的版本,你只需要开发好新的图形接口,里面的业务可以不用改动(或者很少改动)就能完成了,你无需再重新考虑持久化层和业务逻辑层了。假如你把业务处理和视图混在一起写(PHP现在还有很多...),那你需要做的可能将会是重写。所以,分层的好处是能减少层与层之间的关系。而且分层了以后,你需要改变存储模型的代价也会减小的。
  在分层系统中,一个新功能可能需要一个新的接口组件、额外的请求处理、更多的业务逻辑和对存储机制的修改,这些修改都是纵向的。而没有分层的系统则是横向的。一个分层系统有助于最小化横向修改的需要。

  纵向和横向:假如你的系统需要加快运行速度而为之增加主机,那么增加主机的数量就是横向的,而你在一个主机上提高它的配置,那么这就将纵向的。

  

DSC0001.jpg                      好了,先把大体的架构概述完了。之后就是代码实现了。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-356055-1-1.html 上篇帖子: PHP:IP转换整形(转) 下篇帖子: PHP 实现快速排序
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表