Laravel和Golang的依赖注入和控制反转
已经半个月没更新了,为了填补一下心中的愧疚感,还是整理点东西来写一下。
因为最近也在看Go语言开发,看得主要是gin框架的,然后对设计模式也有点思考,这次就顺带做个总结和记录
1. 控制反转IoC 首先讲一下控制反转IOC ,我这里会讲得通俗一点,假如我有一个控制器,UserController,它可以Code,Read,Eat ,当然它还有隐式的__construct构造函数,__destruct析构函数,我们知道这些默认函数在特定的情景会自己触发,比如初始化的时候,生命周期结束释放资源的时候,但是我们如果假如这些函数本身都不会自己触发,那么我们作为作者怎么去让他执行。实际上我的控制器还有ArticleController ,YouBadBadController,我怎么去处理。
各干各的 User你干活之前先去构建一下自己,Article你干活之前也去构建一下自己 这个情况短板就很明显了,后面介绍,每个控制器都要去各干各的,实际上都是Controller ,在处理公共行为的时候,其实我们可以借组外部实现和管理。 我们不用默认的魔法函数了,介绍一个具体场景,假如我现在需要每个控制器都要实现并调用一个handle函数。我们怎么合理去完成,假如现在还要执行一个run 方法 ,每个控制器添加完run函数之后,我们是不是还要写他们的调度;
控制反转统一管理 这个操作是不是可以让一个公共的ControllerService帮忙handle就行了,我们现在不考虑继承。
class ControllerService{public functiondo(){
->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的依赖注入和控制反转 的全部内容, 来源链接: utcz.com/z/515768.html