为什么使用依赖注入与控制反转

lxf2023-12-17 20:50:01

为什么使用依赖注入与控制反转

在我们必须实现类之间相互依靠的情况下,如果按一般的书写,在我们必须变更A类中的数据时,这时必须另外在B、C2个类进行调整,好几个类之间存在着强耦合之间的关系,这一点在编码量并不大的时候往往并不是什么问题,可是当工程大起来也是一个非常费劲的事儿。

// 强耦合
class A{
    name:string
    constructor(name:string){
        this.name = 'Ccat'
    }
}

class B{
    a:any
    constructor(){
        this.a = new A('Ccat').name
    }
}

class C{
    a:any
    constructor(){
        this.a = new A('Ccat').name
    }
}

什么叫依赖注入与控制反转

控制反转(Inversion of Control,通称IoC),是面向对象设计中的一种设计原理,用以减少编码间的耦合性。其中常见的方法称为依赖注入(Dependency Injection,通称DI),根据控制反转,目标被建立的情况下,由一个管控系统中全部目标的外界实体线,把它所依靠的对象的引用传达给它。她们二者的关联为:依赖注入是控制反转的完成形式之一。

看上去这一界定有一些抽象化,大家需要考虑在其中几个关键字

  1. 操纵:大家需要考虑到底是谁控制住了谁。在以往面向对象设计中我们可以通过在目标内部结构根据new开展创建对象,程序流程积极的去建立依靠目标。但在控制反转模式中,是IoC 器皿控制住了目标;控制什么?那便是关键控制住了政府资源获得(不仅仅是目标包含例如文件等)。
  2. 翻转:翻转是通过器皿过来帮忙建立及引入依靠目标。由于由器皿帮助我们搜索及引入依靠目标,目标仅仅被动接受接纳依靠目标,所以也是翻转;哪几个方面反转了?依靠对象获得被反转了。

能理解成我们将要全部经常使用的类统一放在一个容器里开展公布,其他类别能通过相近定阅的形式掌握到容器里提早引入好一点的类。(仅仅只是相近,确实是有一部分差距的)

怎样在Ts中获得依赖注入与控制反转

大家在Ts中能通过创建一个Container类做为IoC器皿,在其中界定一个module目标用以摆放搜集好一点的依靠。此类里的provide方式用以搜集依靠的引入,并把收集的依赖注入至这一类module目标中。与此同时设定get方式供其他类别获得module目标里已经引入的依赖性

class A{
    name:string
    constructor(name:string){
        this.name = name
    }
}

class C{
    name:string
    constructor(name:string){
        this.name = name
    }
}

//消息中间件用以搜集依靠,完成耦合
class Container{
    module:any
    constructor(){
        this.module = {}
    }

    // 依赖注入
    provide(key:string,mo:any){
        this.module[key] = mo
    }

    // 取引入
    get(key:string){
        return this.module[key]
    }
}

const mymo = new Container()
mymo.provide('a',new A('我就是A类!!'))
mymo.provide('c',new A('我就是C类!!'))

class B{
    a:any
    c:any
    constructor(mo:Container){
        this.a = mo.get('a').name

        this.c = mo.get('c').name
    }
}

const myB = new B(mymo)
console.log("B类a为" myB.a)
console.log("B类c为" myB.c)

于是完成了一个简单的依赖注入与控制反转的Demo,这一段Ts执行命令往后的结果显示:

为什么使用依赖注入与控制反转

本站是一个以CSS、JavaScript、Vue、HTML为中心的前端开发技术网址。我们的使命是为众多前端工程师者提供全方位、全方位、好用的前端工程师专业知识和技术服务。 在网站上,大家可以学到最新前端开发技术,掌握前端工程师最新发布的趋势和良好实践。大家提供大量实例教程和实例,让大家可以快速上手前端工程师的关键技术和程序。 本站还提供了一系列好用的工具软件,帮助你更高效地开展前端工程师工作中。公司提供的一种手段和软件都要经过精心策划和改进,能够帮助你节约时间精力,提高研发效率。 此外,本站还拥有一个有活力的小区,你可以在社区里与其它前端工程师者沟通交流技术性、交流经验、处理问题。我们坚信,街道的能量能够帮助你能够更好地进步与成长。 在网站上,大家可以寻找你需要的一切前端工程师网络资源,使您成为一名更加出色的网页开发者。欢迎你添加我们的大家庭,一起探索前端工程师的无限潜能!