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

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

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

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

[ Laravel 5.5 文档 ] 进阶系列 —— 通过事件和事件监听器实现服务解耦

简介 Laravel 事件提供了简单的观察者模式实现,允许你订阅和监听应用中的事件。事件类通常存放在 app/Events 目录,监听器存放在 app/Listeners。如果你在应用中没有看到这些目录,不要担心,它们会在你使用 Artisan 命令生成事件和监听器的时候自动创建。 事件为应用功能模块解耦提供了行之有效的解决办法,因为单个事件可以有多个监听器而这些监听器之间并...

《程序员修炼之道:从小工到专家》第五章:弯曲或折断(2)

四、它只是视图 一旦你基于责任把程序划分成不同模块,你就有了新的问题,在运行时,对象怎样相互交谈?你怎样管理它们之间的逻辑依赖?也就是说,你怎样对这些不同对象中的状态的变化进行同步? 我们将从事件的概念开始。 一个事件就是一条特殊的消息,说明“刚刚发生了某件有趣的事情”,我们可以用事件把某个对象的状态变化通知给可能感兴趣的其他对象。这样使用事件使得那些对象之间的耦合得以减至...

《程序员修炼之道:从小工到专家》第五章:弯曲或折断(1)

在“可撤销性”中,我们谈到不可撤销的决策的危险,在本章,我们将告诉你怎样做出可撤销的决策,以使你的代码在面对你不确定的世界时保持灵活性和可适应性。 一、解耦与得墨忒耳法则 好篱笆促成好邻居。 在“正交性”和“按合约设计”中,我们提出,编写“羞怯”的代码是有益的,但“羞怯”的工作方式有两种:不向别人暴露自己,不太与太多人打交道。 把你的代码组织成最小组织单位(模块),并...

《程序员修炼之道:从小工到专家》第二章:注重实效的途径(1)

一、重复的危害 系统中的每一项知识必须具有单一、无歧义、权威的表示,这就是DRY原则(Don‘t Repeat Yourself)。 与此不同的做法是在两个或多个地方表达同一事物。如果你改变其中一处,你必须改变其它各处。 重复是怎样发生的 强加的重复(环境使然) 无意的重复 无耐性的重复(开发者偷懒,如何避免?记住“欲速则不达”,现在节省几秒钟,以后会付出数...

现代 PHP 新特性系列(二) —— 善用接口

接口不是现代PHP的新特性,但是非常重要,学会使用接口,可以极大提升我们的编程能力,所以在日常开发中应该尽可能多地使用接口。 接口是两个PHP对象之间的契约(Contract),Laravel底层就直接将接口放在Contracts目录中: 接口将我们的代码和依赖解耦了,而且允许我们的代码依赖任何实现了预期接口的第三方代码,我们不管第三方代码是如何实现接口的,只关心第三...