关于Laravel模型观察者的使用

2019-01-01 21:30 XXM

观察者模式:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新 又称为发布-订阅(Publish-Subscribe)模式、模型-视图(Model-View)模式、源-监听(Source-Listener)模式、或从属者(Dependents)模式。

以上资料来源于wiki.

个人浅显的理解就是:当一个对象的状态发生变更时,依赖于它或它依赖于的对象全部会收到通知.并作出一定的改变.

Q:为什么要用到观察者模式呢?

A:假设我们现在有一个场景,用户提现时,我们需要给用户的手机发送一条短信,来通知用户提现,最原始的方法,我们只需要定义一个create方法,将这些操作都写在create方法里面,但是随着业务逻辑变动越来越复杂,提现类越来越庞大,写在create里面已经无法满足我们的需求和快速变动时.

这时我们便需要用到观察者模式了,减少程序的耦合度,快速变更需求.

下面我们通过Laravel的模型观察者来实现这一场景:

场景:用户发起提现后,向该用户手机发送短信.

1.首先通过artisan命令来生成我们的观察者类

php artisan make:observer --model=Withdraw WithdrawObserver

生成成功后,会在项目的app/Observers/ 目录下生成对应的观察类.

2.模型事件

在模型的生命周期中,当发生一些事的时候,Eloquent 会触发一些事件:

  • creating
  • created
  • updating
  • updated
  • saving
  • saved
  • deleting
  • deleted
  • restoring
  • restored

对于每一个操作,都对应两个独立的事件,如create(),便会触发creating() created()两个事件这两个分为对应 t-1 和 t+1时刻,即为即将发生和已发生,了解这些事件后,我们便可以借助这些事件来完成我们的业务需求.

模型事件文档:https://laravel-china.org/docs/laravel/5.6/eloquent/1403#events

3.绑定观察者及逻辑编写

我们需要写在AppServiceProvider的boot方法中进行绑定

WX20190101-215629@2x.png

当用户发起提现时,我们需要向用户手机发送短信,这是一个t+1的操作,我们需要写在created()函数里

WX20190101-214438@2x.png

下面我们模拟用户发起一个一次提现.

WX20190101-214910@2x.png

这样就完善了我们的业务场景,假设我们后期业务变动,需要在用户发起提现时,先进行手机短信验证,我们只需要在对应事件中添加我们对应的操作,不用时直接移除即可,而无需去修改我们原有的逻辑代码,大大改善了代码的灵活性.

以上就是鄙人的一些见解,如有不足尽请指出!

日记本

如果觉得我的文章对您有用,请随意赞赏。您的支持将鼓励我继续创作!

赞赏支持
被以下专题收入,发现更多相似内容