掌握依赖注入5大原则,无需额外编代码!

更新日期: 2019-12-26 阅读: 2.6k 标签: 代码

如果是第一次接触这个概念,可能会一时没有头绪,网上的各种解释可能会让你更加混乱,并觉得它没那么简单。 其实依赖注入本身是单纯、简单的。

简单来说,依赖注入是一种方式、方法或者说手段,是让被注入者和注入者之间建立关联的手段。

依赖注入的目的是松耦合,是交互对象之间的松耦合。

今天,小芯带来的文章主要描述了关于进行依赖注入(dependency injection,DI)的五大原则,具有强大的实用性。

遵循这五大基本思想,在进行DI时,你就无需额外花功夫于编写代码啦,超方便。


一、保持简单的构造函数

构造函数应该保持简单。 类的构造函数不应该做任何工作——也就是说,除了检查null、创建可创建类和存储依赖项供以后使用之外,它们不应该做任何事情。

它们不应该包含任何编码逻辑。 一个类构造函数中没有检查null的if子句,那么这个类就会被分成两个类。 (有不涉及if语句检查nil-value参数的方法。 )

复杂的构造函数表明类做的工作太多。 保持构造函数简短、简单且无逻辑。


二、不要假设接口是抽象的

接口很不错,我一直对它赞不绝口。 然而,重要的是要认识到并非每个接口都是抽象的。

例如,如果接口是公共部分类的精确表示,实际上并没有抽象任何东西,对吗? (这些接口被称为头接口,类似于c++的头文件)。 从类中提取的接口可以很容易地单独与该类紧密耦合,使得接口作为抽象类毫无用处。

最后,抽象类可能是有漏洞的——也就是说,它们可以揭示关于实现类的特定细节。 有漏洞的抽象类通常也与特定的实现类绑定在一起。


三、不要对实现类做任何假设

当然,如果没有实现类,接口是毫无用处的。 但是,作为开发人员不应对实现类做任何假设。

只该根据接口生成的契约进行编码。 你可能已经编写了实现,但不应该在考虑实现的情况下针对接口编写代码。 换句话说,针对接口的代码就好像一个全新的、更好的接口实现。

一个设计良好的接口会告诉你需要做什么以及如何使用它。 该接口的实现对你使用该接口是无关紧要的。


四、针对抽象类而非实现类的代码

该短语出自“四人帮”之一的埃里希·伽玛(Erich Gamma)(《设计模式》一书的作者),是一个重要的想法。 如果只能教给新的开发者一件事,那就是这句格言。

抽象类是灵活的——通常是接口但不总是(见下文)。

接口(或抽象类)可以通过多种方式实现。 可以在实现完成前对接口进行编码。 如果对实现进行编码,将创建一个紧密耦合且不灵活的系统。 不要把自己限定在单一的实现中。 相反,使用抽象,编出可扩展、可重用及灵活的代码。


五、永远不要创建不该创建的东西

类别应该遵循 单一职责原则 ——即一个类只做一件事。

如此,就不应再创建事物,否则是做了两件事。 相反,应根据其所需的功能创建和提供该功能。

可创建类 vs 可注入类

那么应该创建什么呢?

我们应该关注两种不同的对象:可创建类和可注入类。

可创建类指应该继续创建的类。 是常见的运行库或实用程序类。

通常运行库中的类被认为是可创建类。 这些类应该被创建,而非注入。 它们的使用期限很短,通常不超过一种方法的范围。 可创建类在所有类中是必不可少的,可以在构造函数中创建。 一个可创建类只能传递给构造函数的另一个类。

另一方面,可注入类是我们永远不想直接创建的类。 也是不希望硬编码依赖项的类,应始终通过DI传递。

在构造函数中,它们通常被作为是依赖项。 根据以上规则,可注入类应该依赖接口注入的类,而非实例。

它通常是作为业务逻辑而编写的类。 隐藏在抽象类后,通常是接口。 还要注意,可注入类可在构造函数中请求其他的可注入类。

适当使用DI对代码的意义重大。 做好这件事并不难,但确实需要有远见、计划和设计。

但是,在维护代码时,小小的工作将带来大大的回报。 修复松散耦合的代码是维护人员的梦想,我们要努力编写这样的代码,相信事后会收获满满。


原文:https://mp.weixin.qq.com/s/5-Cxb8y1J5msxVk4-FA1Uw
相关链接:https://medium.com/better-programming/five-principles-of-dependency-injection-5bd0cca9cb04

本文内容仅供个人学习、研究或参考使用,不构成任何形式的决策建议、专业指导或法律依据。未经授权,禁止任何单位或个人以商业售卖、虚假宣传、侵权传播等非学习研究目的使用本文内容。如需分享或转载,请保留原文来源信息,不得篡改、删减内容或侵犯相关权益。感谢您的理解与支持!

链接: https://fly63.com/article/detial/7068

相关推荐

减少嵌套,降低代码复杂度

减少嵌套会让代码可读性更好,同时也能更容易的找出bug,开发人员可以更快的迭代,程序也会越来越稳定。简化代码,让编程更轻松!

js高亮显示关键词_页面、搜索关键词高亮显示

页面实现关键词高亮显示:在项目期间遇到一个需求,就是搜索关键词时需要高亮显示,主要通过正则匹配来实现页面关键词高亮显示。在搜索结果中高亮显示关键词:有一组关键词数组,在数组中筛选出符合关键字的内容并将关键字高亮

Js代码压缩工具推荐

JavaScript 代码压缩是指去除源代码里的所有不必要的字符,而不改变其功能的过程。这些不必要的字符通常包括空格字符,换行字符,注释以及块分隔符等用来增加可读性的代码,但并不需要它来执行。

源代码是什么意思

源代码(也称源程序),是指一系列人类可读的计算机语言指令。 在现代程序语言中,源代码可以是以书籍或者磁带的形式出现,但最为常用的格式是文本文件,这种典型格式的目的是为了编译出计算机程序。

tinymce与prism代码高亮实现及汉化的配置

TinyMCE是一个轻量级的基于浏览器的所见即所得编辑器,由JavaScript写成。它对IE6+和Firefox1.5+都有着非常良好的支持。功能方强大,并且功能配置灵活简单。另一特点是加载速度非常快的。

Google内部在代码质量上的实践

良好的编程习惯涉及到很多方面,但在软件行业内,大多数的公司或组织都不会把良好的编程习惯列为主要关注点。 例如,具有可读性和可维护性的代码比编写好的测试代码或使用正确的工具更有意义,前者的意义在于可以让代码更易于理解和修改。

接手代码太烂,要不要辞职?

朋友发表了一条说说:入职新公司,从重构代码到放弃”,我就问他怎么了?他说,刚进一家新公司,接手代码太烂,领导让我先熟悉业务逻辑,然后去修复之前项目中遗留的bug,实在不行就重构

网站加入收藏、设为首页Js代码(兼容各种浏览器)

这里虽然说是兼容,但是有些浏览器的设置就是不支持用js来把页面设为首页,加入收藏夹,只能让用户手动去在浏览器或者按键去设置这些功能,这里说的兼容是指当浏览器有这个设置的时候js会有提示

javascript代码语句结束要不要加分号?

在 C 语言中,分号是语句结束的标志,在语句结束的地方一定要以分号结束。而 JavaScript 的分号却是可选的,若语句都各占一行,则可以省略分号。avaScript 中的 ASI 机制,允许我们省略分号。ASI 机制不是说在解析过程中解析器自动把分号添加到代码中

关于 Google 发布的 JS 代码规范

Google为了那些还不熟悉代码规范的人发布了一个JS代码规范。其中列出了编写简洁易懂的代码所应该做的最佳实践。代码规范并不是一种编写正确JavaScript代码的规则,而是为了保持源代码编写模式一致的一种选择。

点击更多...

内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!