初探 Laravel 和其中的设计模式

设计模式,是一套建立在长期对代码设计的实践基础上,能够在众多应用场景下反复套用的经验总结。 可以说,设计模式能够保证代码的健壮性,提高程序的可扩展性,是程序设计里的最佳模型和优秀解决方案。 设计模式比之于高楼大厦,就是其中的钢筋混泥土结构,是代码工程化的基石。

设计模式简述

设计模式一词,来源于 Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides 合著的《设计模式:可复用的面向对象的软件基础》( Design Patterns: Elements of Reusable Object-Oriented Software )一书。 在这本书中,首次提到了设计模式( Design Patterns )这个概念。 也正是如此,这本书被认为是设计模式的开创者,也是设计模式最本源的理论基础。

《设计模式》的封面

设计模式这一理念经过二十多年的积累、丰富,虽然曾有负面的声音,但不可否认的是,它仍然是当今程序设计领域不可或缺的指导思想之一。

正如《设计模式》一书中解释的:

在开发可利用软件时,一大问题在于其往往必须进行重构或者重组。 设计模式能帮助大家了解如何对设计进行重组,并降低日后需要面对的重构工作量。

当我们在进行程序设计时,设计模式能够指导我们进行决策,并且解释我们决策的理由。

学习设计模式,理解设计模式,并将设计模式用于指导我们的程序设计,能够帮助我们完成对结构梳理、程序规划以及代码实现中质的飞跃。

常见的设计模式

在《设计模式》一书中,向我们介绍了二十三种设计模式。 因为《设计模式》这本书属于开山之作,所以这些设计模式与二十三这个数字,都是设计模式领域常见的词汇。

在书中,作者们将这二十三种设计模式分成了三类,分别是创建型模式、结构型模式和行为型模式。

创建型模式包含了:

  • 工厂方法模式( Factory Method )
  • 抽象工厂模式( Abstract Factory )
  • 单例模式( Singleton )
  • 建造者模式( Builder )
  • 原型模式( Prototype )

结构型模式包含了:

  • 适配器模式( Adapter )
  • 装饰器模式( Decorator )
  • 代理模式( Proxy )
  • 外观模式( Facade )
  • 桥接模式( Bridge )
  • 组合模式( Composite )
  • 享元模式( Flyweight )

行为型模式包含了:

  • 策略模式( Strategy )
  • 模板方法模式( Template Method )
  • 观察者模式( Observer )
  • 迭代子模式( Iterator )
  • 责任链模式( Chain of Responsibility )
  • 命令模式( Command )
  • 备忘录模式( Memento )
  • 状态模式( State )
  • 访问者模式( Visitor )
  • 中介者模式( Mediator )
  • 解释器模式( Interpreter )

书中通过一幅图,剖析了这二十三种设计模式的关系。

设计模式关系图

当然,《设计模式》一书毕竟篇幅有限,并且出版也已经数十年,许多设计模式,如依赖注入( Dependency Injection )等,其实并没有被收录在其中。 而出现在《设计模式》一书中的设计模式,也并非都是我们能够经常用到的设计模式。

在这本小册里,我们挑选了十个在 Laravel 中得以体现,并且也在我们的日常开发中能够经常派上用场的设计模式,通过理论与样例结合的方式,剖析设计模式背后的思想。

关于 Laravel

Laravel 是一款以 PHP 语言编写,追求为开发者提供编写简洁,富有表达能力代码的 Web 框架。

Laravel Banner

Laravel 并不拘泥于传统的框架的霸业逻辑(框架中所有的功能都通过自身实现),而是站在了巨人的肩膀上,借助不同领域中成熟的模块,实现了优秀模块的聚合。 正是因为这个原因,Laravel 之中的各个功能模块,都汇聚着这些领域在 PHP 中最佳的实现。

当然,如果这些仍然不能说服你,那么下面这两张图应该很容易证明 Laravel 当之无愧为目前 PHP 领域的佼佼者。

在 GitHub 上 PHP 语言项目的 Star 数,Laravel 远超第二名,而且是倍数的超越。

Github 热门项目

Google 趋势中对主流 PHP 框架的分析,Laravel 的增长速度令其他框架望尘莫及。

Laravel 搜索趋势图

为什么选择 Laravel

通过《设计模式:可复用的面向对象的软件基础》这一书名,很容易看得出设计模式专门针对的是面向对象的程序设计。 所以在所有的设计模式中,谈及的都是对象与对象之间的关系。 而面向过程等其他程序编程思想中,就很难发挥设计模式的用武之地了。

由于 PHP 有着特殊的历史背景,时至今日,在 PHP 语法中,仍然保持着对面向过程与面向对象的同时支持。 正是由于这个原因,许多老牌 PHP 框架也充斥着大量面向过程与面向对象混杂,逻辑难以梳理的代码。

Laravel 作为 PHP Web 框架领域的新宠,其相较于其他主流 PHP 框架来说年轻太多太多。 也是因为如此,Laravel 可以毫无顾忌的完全展开它的构想,完整的将面向对象的编程思想融入到框架的每个地方。

在此基础上,Laravel 对自身代码的质量也非常重视,任何一个模块都经过反复琢磨。 即使是非常细枝末节的部分,Laravel 都没有粗陋去实现。 所以,在 Laravel 中,我们能够发现很多设计模式的体现可以借鉴。

就是基于这些原因,这本小册里选择了 Laravel 的源码作为示例,展现设计模式在真实场景中的体现。 希望通过设计模式理论和 Laravel 代码中实际使用的结合,帮助大家更好的理解设计模式的精华。

留言
  • 厉害了

    评论

  • laravel做为学习面象对象的基础还不错。实际项目不值得使用。太重,对内存和cpu占用太多。完全为了面象对象而对象。php本身不适合重面象对象,拿php当java用很明显是错的。遇到n个用laravel的公司,都用的很乱,项目真深入下去,laravel绝对是坑。都是让一些培训学校给吹的,这个适合学习,不适合项目。

    评论

    • 这你就错了,面向过程的项目怎么能成为大项目?解耦都做不到,怎么应对几十、几百人的开发团队?
  • 感觉讲的太浅,不如那本laravel书,就是基于版本老了,5.1,觉得这个浅的可以买那本电子书看看
  • laravel有点设计过度了,设计思想值得借鉴,实际项目不用

    评论

    • Laravel的性能确实是诟病
    • 回复wujunze结合swoole 也能完美的提升性能
  • 这是基于laravel多少版本介绍的呢

    评论

    • 基于 Laravel 5.5
  • 这是基于laravel多少版本介绍的呢

    评论

    • 5.5吧
    • 是目前最新的版本,也就是 Laravel 5.5
  • 感觉不是php工程师也可以看这本书。

    评论

    • 是的,设计模式对不同于编程语言来说都是想通的,这里只是用了 Laravel 作为一种载体,其实所有的开发者都可以阅读。
    • Sure