【问题标题】:How to set up constructor functions so that it doesn't have too many parameters? [closed]如何设置构造函数,使其没有太多参数? [关闭]
【发布时间】:2020-12-04 13:12:43
【问题描述】:

我已经在 javascript 中工作了一年多一点,我从不喜欢的一件事是当我的构造函数有 3 个以上的参数并且我必须将它们垂直堆叠以提高可读性,尤其是在使用 angular 时,我将构造函数视为函数(这可能是错误的,我没有受过正规教育)我想保持我的函数和构造函数使用相同的格式以保持一致性。这使我使用非常短的变量名来避免堆叠它们(这对可维护性很糟糕)EX:

    constructor(public fb: FormBuilder, private db: DatabaseService){

    }

VS:

constructor(
    private fs: AngularFirestore,
    public fb: FormBuilder,
    private db: DatabaseService
) {}

如上所示; 3 个参数,它现在是我一生中见过的最丑陋的东西 LoL。这样做的正确方法是什么?

TL;DR
如何重构我的构造函数以使其更易于维护?

编辑
基于一些 cmets,我认为这值得回应:如果我以客观的方式看待这一点(撇开我自己的观点不谈),传统观点认为,在编写函数时,参数越少越好。如果我们假设构造函数是函数,那么该逻辑必须扩展到依赖注入。

【问题讨论】:

  • 鼓励使用短名称的原因是什么?您已经将它们垂直堆叠了,为什么更长的名称会不好?
  • 没有什么神奇的方法。在依赖注入的上下文中,有很多参数是可以的。您可以导入Injector 服务并从那里注入所有内容,但没有真正的好处。此外,您可以只导入一项服务,它会执行您的所有业务逻辑。
  • 如果是两个,它会修复使它适合一行,我只是想用一个 sn-p 而不是两个来说明我的示例。
  • 如果这个构造函数在一个组件中,你可以将你的组件拆分成更小的组件,只做一件事,因此需要更少的依赖。
  • 我不明白在构造函数中有多个参数有什么问题?如果这是一个我会理解的功能。

标签: angular typescript class constructor


【解决方案1】:

只需将每个字段放在自己的行上。在他们自己的行中意味着没有理由对变量名称进行简洁,您可以轻松地为每个变量添加文档字符串:

class Example {
    constructor(
        /** fire store */
        private long_and_verbose_name: AngularFirestore,
        /** form builder */
        public form_builder: FormBuilder,
        /** service for database */
        private db: DatabaseService
    ) {}
}

这并不比在构造函数之外声明每个字段更难看:

class Example {
    /** fire store */
    private fs: AngularFirestore,
    /** form builder */
    public fb: FormBuilder,
    /** service for database */
    private db: DatabaseService

    constructor(.......){
        this.fs = ...
        ...
    }
}

那么,如果您有 Intellisense,您应该能够在将鼠标悬停在某个字段上时看到文档字符串:

我的建议是让自己使用更多行并使用文档。

【讨论】:

    【解决方案2】:

    让我们对有问题的主题有一个广泛的了解 - 代码格式化

    拥有14 年以上的编码经验(自 2006 年以来),从事多种语言/技术(C、Java/android、JS、TS/angular 等) em> 并与一些真正很酷的开发人员作为队友。我只想分享我在代码格式化

    方面学到的一个建议

    坏代码是机器能理解的,好代码是你能理解的,好代码是别人能理解的。

    我们可以从上面的陈述中得到一些要点:-

    1. 遵循社区驱动的代码风格指南https://angular.io/guide/styleguide
    2. 使用 linter(TsLint、Jslint)等自动化工具
    3. 遵守约定,不要被自己的眼睛所迷惑。

    记住 - 你只会写一次,但其他人(包括你未来的自己)可能会读很多次。

    【讨论】:

      猜你喜欢
      • 2020-04-10
      • 2023-01-14
      • 1970-01-01
      • 2017-04-04
      • 2011-04-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-25
      相关资源
      最近更新 更多