Laravel和Golang的依赖注入和控制反转
  • H5W3
  • 2022-05-28 19:39:09
  • 分类:综合

编程

已经半个月没更新了,为了填补一下心中的愧疚感,还是整理点东西来写一下。

因为最近也在看Go语言开发,看得主要是gin框架的,然后对设计模式也有点思考,这次就顺带做个总结和记录

1. 控制反转IoC 首先讲一下控制反转IOC ,我这里会讲得通俗一点,假如我有一个控制器,UserController,它可以Code,Read,Eat ,当然它还有隐式的__construct构造函数,__destruct析构函数,我们知道这些默认函数在特定的情景会自己触发,比如初始化的时候,生命周期结束释放资源的时候,但是我们如果假如这些函数本身都不会自己触发,那么我们作为作者怎么去让他执行。实际上我的控制器还有ArticleController ,YouBadBadController,我怎么去处理。

  • 各干各的 User你干活之前先去构建一下自己,Article你干活之前也去构建一下自己 这个情况短板就很明显了,后面介绍,每个控制器都要去各干各的,实际上都是Controller ,在处理公共行为的时候,其实我们可以借组外部实现和管理。 我们不用默认的魔法函数了,介绍一个具体场景,假如我现在需要每个控制器都要实现并调用一个handle函数。我们怎么合理去完成,假如现在还要执行一个run 方法 ,每个控制器添加完run函数之后,我们是不是还要写他们的调度;

  • 控制反转统一管理 这个操作是不是可以让一个公共的ControllerService帮忙handle就行了,我们现在不考虑继承。

class ControllerService{

do(){

->handle();

} //去吧比卡丘; }

}

等等,小智不投精灵球怎么去吧,小智呢? 我们需要把控制方带过来

class ControllerService{

public $handler;

public function __construct($handler){

$this->handler=$handler ;

} //通过构造函数带入; }

//

public function setHandler($handler){

$this->handler->handle();

} //通过setter带入; }

public function do(){

$this->handler->handle();

} //去吧比卡丘; }

}

new ControllerService()->setHandler(new UserController())->do();

这样控制权已经反转给ControllerService了;

2. 依赖注入DI 本质上IoC和DI是同一思想下不同维度的表现 ,用通俗的话说就是,IoC是ControllerService的注册,DI是ControllerService的初始化

类似的实现,我们在laravel中的任务分发调度也能看到 dispatch(new SignInRewardJob($data, $user));

这里的控制主体已经转给了 PendingDispatch 我们可以看到常见的闭包函数,在这里也有应用

还有中间件也是典型的例子

Go语言中的interface 反射机制也是Ioc的体现

欢迎大家一起交流补充。

以上是 Laravel和Golang的依赖注入和控制反转 的全部内容, 来源链接: www.h5w3.com/z/515768.html