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

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

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

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

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

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

[ Laravel 从学徒到工匠系列 ] 接口即契约篇

强类型与鸭子类型 在之前的章节里,我们讨论了依赖注入的基础知识:什么是依赖注入;如何实现依赖注入;依赖注入有什么好处。之前的例子中也模拟了将接口注入到类里面的过程。在我们继续学习后续内容之前,有必要深入讨论一下接口,而这正是很多 PHP 开发者所不熟悉的。 在我成为 PHP 程序员之前,我是写 .NET 的。你觉得我是喜欢原生代码还是什么?在 .NET 里到处都是接口,而且很多接口都定义...

[ Laravel 从学徒到工匠系列 ] 依赖注入篇

问题引入 整个 Laravel 框架的基石是一个功能强大的 IoC 容器(控制反转容器),如果你想真正从底层理解 Laravel 框架,就必须好好掌握它。不过,也不要被这个名头吓住,要知道 IoC 容器只不过是一种用于方便我们实现「依赖注入」这种软件设计模式的工具。而且要实现依赖注入并不一定非要通过 IoC 容器,只是使用 IoC 容器会更容易一点儿。 首先,来看看我们为何要使用依赖注入...

基于 Laravel + Vue 构建 API 驱动的前后端分离应用系列(三十七) —— 管理后台后端动作审核接口实现

从这篇教程开始,我们将开始为 Roast 应用构建管理后台,在上一篇教程中,我们为咖啡店的增删改查加上了权限管理,普通用户针对咖啡店的新增、修改和删除请求都会在后台管理员审核后才能执行,否则就是躺在数据库里的一条记录而已,我们将从这个功能出发构建我们的后台管理系统。 由于整个工作量比较大,所以我们会分三篇教程来实现这个管理后台和审核功能,首先我们还是从 Laravel 后端接口开始,先来...

[ Laravel 5.7 文档 ] 底层原理 —— 契约(Contracts)

简介 Laravel 中的契约是指框架提供的一系列定义核心服务的接口。 例如,Illuminate\Contracts\Queue\Queue 契约定义了队列任务需要实现的方法,Illuminate\Contracts\Mail\Mailer 契约定义了发送邮件所需要实现的方法。 每一个契约都有框架提供的相应实现。例如,Laravel 为队列提供了多个驱动的实现,邮件则由 SwiftMa...

Laravel API 系列教程(五):基于 GraphQL 构建 Laravel API —— 高级使用篇

上一篇教程中我们重点探讨了 GraphQL 的概念及其在 Laravel API 构建中的基本使用,本篇教程将在其基础上探讨关于 GraphQL 的一些更高级的使用。 带参数的查询 带参数的查询是构建 API 时的常见操作,上一篇教程中编写的列表查询功能已经支持带参数查询,只需传入相应查询参数即可:  嵌套资源 关联关系是 Laravel 模型操作中又一重要功能,...

[ Laravel 5.6 文档 ] 底层原理 —— 契约(Contracts)

简介 Laravel 中的契约是指框架提供的一系列定义核心服务的接口。 例如,Illuminate\Contracts\Queue\Queue 契约定义了队列任务需要实现的方法,Illuminate\Contracts\Mail\Mailer 契约定义了发送邮件所需要实现的方法。 每一个契约都有框架提供的相应实现。例如,Laravel 为队列提供了多个驱动的实现,邮件则由 Swi...

[ Laravel 5.5 文档 ] 底层原理 —— 契约(Contracts)

简介 Laravel 中的契约是指框架提供的一系列定义核心服务的接口。 例如,Illuminate\Contracts\Queue\Queue 契约定义了队列任务需要实现的方法,Illuminate\Contracts\Mail\Mailer 契约定义了发送邮件所需要实现的方法。 每一个契约都有框架提供的相应实现。例如,Laravel 为队列提供了多个驱动的实现,邮件则由 S...