gpt4 book ai didi

java - 在构造函数中做很多坏事吗?

转载 作者:IT老高 更新时间:2023-10-28 13:53:16 28 4
gpt4 key购买 nike

使所有字段final 通常是一个好主意,但有时我发现自己在构造函数中做了所有事情。最近我在构造函数中完成了一个真正所有操作的类,包括读取属性文件和访问数据库。

一方面,这就是类的用途,它封装了读取的数据,我喜欢创建完全初始化的对象。构造函数一点也不复杂,因为它委托(delegate)了大部分工作,所以看起来不错。

另一方面,感觉有点奇怪。此外,在 this talk在大约 17:58 时,有充分的理由在构造函数中没有做太多工作。我想我可以通过传递适当的假人作为构造函数参数来消除这个问题。

问题仍然存在:在构造函数中做大量工作(甚至所有工作)是否不好?

最佳答案

我认为“在构造函数中工作”还可以......

...只要你不违反Single Responsibility Principle (SRP)并坚持使用Dependency Injection (DI) .

我最近一直在问自己这个问题。我发现的反对在构造函数中工作的动机是:

  • 很难测试
    • 我见过的所有例子都是DI没有被使用。实际工作并不是构造函数的错。
  • 您可能不需要构造函数计算的所有结果,这会浪费处理时间并且很难单独进行测试。
    • 这基本上违反了SRP ,不是构造函数的错。
  • 旧的编译器在构造函数中抛出异常时遇到了问题,因此除了在构造函数中分配字段之外,您不应该做任何事情。
    • 我认为在编写新代码时考虑到编译器的历史缺陷并不是一个好主意。如果我们这样做,我们还不如取消 C++11 和所有好的东西。

我的看法是……

...如果您的构造函数需要做一些工作以使其遵守 Resource Acquisition Is Initialization (RAII)并且类(class)不违反SRPDI使用得当;然后在构造函数中工作就是 A-Okay!如果您想阻止使用初始化完全失败的类对象,而不是依赖用户检查某些返回值,您甚至可以抛出异常。

关于java - 在构造函数中做很多坏事吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7048515/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com