[ Laravel 从学徒到工匠系列 ] 设计原则篇:接口隔离原则

简介 接口隔离原则规定,不应该强制接口的实现依赖于它不使用的方法。你是否曾被迫去实现一些你用不到的接口方法?如果答案是肯定的,那么你可能会在实现里创建一个空方法。这就是一个使用了违背接口隔离原则的接口的例子。 在实际操作中,这个原则要求接口必须粒度很细,且专注于一个领域。听起来很耳熟?记住,所有五个「SOLID」原则都是相关的,也就是说违背了其中一个原则,通常意味着也违背了其他的原则。当...

[ Laravel 从学徒到工匠系列 ] 设计原则篇:里氏替换原则

简介 别担心,里氏替换原则名字起的高大上,但是其实很简单。该原则可以描述为:一个抽象的任意实现都可以在声明该抽象的地方替换它。读起来有点绕口,通俗点说就是个:如果一个类使用了某个接口的实现,那么一定可以通过该接口的其它实现来替换它,不用做出任何修改。 里氏替换原则规定对象可以被其子类的实例所替换,并且不会影响到程序的正确性。 实战 为了说明该原则,我们继续使用前面编写的 OrderP...

[ Laravel 从学徒到工匠系列 ] 设计原则篇:开放封闭原则

简介 在一个应用的生命周期里,大部分时间都花在了向现有代码库增加功能,而非一直从零开始写新功能。你可能已经意识到了,这会是一个繁琐且令人痛苦的过程。无论何时你修改代码,都有可能引入新的bug,或者破坏原有的旧功能。理想情况下,我们应该可以像写全新的代码一样来快速修改现有的代码。如果采用开放封闭原则来正确设计我们的应用程序,那么这是可以做到的! 开放封闭原则,又称开闭原则,规定代码对扩展...

[ Laravel 从学徒到工匠系列 ] 设计原则篇:单一职责原则

简介 罗伯特·C·马丁在 21 世纪早期引入了名为「SOLID」的设计原则,指代了面向对象编程和面向对象设计的五个基本原则: 单一职责原则(Single Responsibility Principle) 开放封闭原则(Open Closed Principle) 里氏替换原则(Liskov Substitution Principle) 接口隔离原则(Interface Segreg...

[ Laravel 从学徒到工匠系列 ] 框架扩展篇

简介 为了方便你自定义框架的核心组件功能,甚至是完全替换它们,Laravel 提供了大量可以对应用进行扩展的地方。例如,哈希服务实现了 Illuminate\Contracts\Hashing\Hasher 契约,你可以按照自己应用的需求来重新实现它。你还可以继承 Request 对象类,添加自己用的顺手的方法。你甚至可以添加全新的用户认证、缓存和会话驱动! Laravel 组件功能通常...

[ Laravel 从入门到精通 ] 数据库和 Eloquent 进阶 —— Eloquent 模型关联关系(上)

我们所熟知的 MySQL、SQL Server、Oracle 都是关系型数据库,何谓关系型数据库?简单来说就是数据表之间存在关联关系。到目前为止,我们介绍的所有 Eloquent 模型操作都是针对单表的,接下来我们将花三篇左右的篇幅来给大家介绍如何在 Eloquent 模型类中建立模型之间的各种关联关系,以及如何实现关联查询和更新。 Eloquent 模型支持的关联关系包括以下六种: ...

[ Laravel 从学徒到工匠系列 ] 应用架构篇

简介 我们已经学习了通过 Laravel 构建架构良好的应用的各个方面,接下来,让我们再深入探讨一些细节。在本章,我们将讨论如何解耦各种处理器:队列处理器、事件处理器,甚至其他「类似事件」的结构,比如路由过滤器。 大部分的「处理器」可以被当作传输层组件。也就是说,它们通过队列处理器、被触发的事件、或者外部发来的请求等接收调用。这样一来,我们可以将这些处理器理解为控制器,同样需要避免在它...

[ Laravel 从入门到精通 ] 数据库和 Eloquent 进阶 —— Eloquent 模型事件和监听方式大全

所有支持的模型事件 在 Eloquent 模型类上进行查询、插入、更新、删除操作时,会触发相应的模型事件(关于事件我们后面会单独讲),不管你有没有监听它们。这些事件包括: retrieved:获取到模型实例后触发 creating:插入到数据库前触发 created:插入到数据库后触发 updating:更新到数据库前触发 updated:更新到数据库后触发 saving:保存到数据库...

[ Laravel 从学徒到工匠系列 ] 目录结构篇

简介 这个类要放到哪儿?这可能是基于框架构建应用时非常常见的问题。很多开发者都会有这个疑问,因为他们被灌输了「模型」就是「数据库」这种概念。因此,在控制器里面处理 HTTP 请求,在模型类里面操作数据库增删改查,在视图里编写要显示的HTML,成了开发者们约定俗成的规定。但是,发送电子邮件的类要放到哪儿?验证数据的类呢?调用外部 API 的类呢?在这一章中,我们将介绍 Laravel 框架...

[ Laravel 从入门到精通 ] 数据库和 Eloquent 进阶 —— 在 Eloquent 模型类上使用全局作用域和局部作用域进行查询

问题引出 在通过 Eloquent 模型实现增删改查这篇教程中,我们已经学习了如何在 Eloquent 模型类中进行各种查询,但是这些查询大多需要手动调用查询构建器提供的各种方法来实现。如果有一些查询需要在多个地方调用,那么在每个地方都要编写同样的代码,有没有什么办法对这种场景下的查询代码进行优化呢? Eloquent 模型类提供的「Scope」功能就可以帮我们实现这种优化。「Scope...