什么时候应该在自己的文件中定义常量?
When should constants be defined in their own files?
我注意到一些项目喜欢将常量存储在它们自己的文件中,即在全局和主程序循环中使用的常量可能会使主文件混乱,所以他们可能希望将它们放在其他地方然后 reference/import file/class.
我了解到,在编写 OOP class 时,您希望将所有常量保留在 class 文件的 header 中,以便可以静态引用它们:
myCar.setColour(Colour.RED);
其中 RED
是 Colour
class 中的颜色常量。
拥有大量常量的好做法是什么,它们应该只是位于主文件的顶部,还是以任何方式明智地拥有一个ProgramConstants
class 是纯静态的,public 并且可供阅读?
我更喜欢将常量放入 classes 中它们在逻辑上属于的地方。
不要像ProgramConstants
那样把不相关的常量放到class中,因为你会创建一堆乱七八糟的常量,这将变得难以维护。
不,您不应该将所有常量放在主 class 的顶部或它们自己的 class 中,它们应该放在任何 class 逻辑上关联的地方与.
问题是,如果程序员看到一个通用的地方可以放置某些东西,例如常量文件,那么他们会将所有常量放在这里以维护模式,而他们应该将它们放在正确且合乎逻辑的位置.拥有一个大的常量文件使得使用常量变得更加困难,因为它们实际上是未分类的并且破坏了模块化。作为架构师,您的职责是避免设计带有此类陷阱的系统。
因此,举例来说,假设您有与 Java 应用程序的 运行 相关的系统属性,那么在您的主 class 中一定要有几个这样的常量。如果你最终在主 class 中有太多,那么将它们移到同一个包中的 SystemProperties class 中。当程序员需要几个常量供自己使用时,例如您示例中的颜色,他们应该创建自己的颜色 class,并将其放入与包含这些常量的功能关联的包中。
What is good practice for having a large amount of constants, should they just be at the top of your main file or is it in any way wise to have maybe a ProgramConstants class
常量的放置位置取决于常量的类型。
JDK中的Integer
class有一个叫做MIN_VALUE
的常量,它定义了一个int的最小值。 Character
class 定义了一个名为 MIN_VALUE
的常量,它定义了一个字符的最小值。
将上述方法与定义全局 WrapperConstants
class/enum 两个常量即 CHAR_MIN_VALUE
和 INT_MIN_VALUE
的方法进行比较。您很快就会为其他数据类型向该文件添加更多常量。(LONG_MIN_VALUE
、FLOAT_MIN_VALUE
等等...)
当您还想定义 MAX_VALUE
时会发生什么?看看你的 class 能多快爆炸?可读性怎么样。 WrapperConstants.CHAR_MIN_VALUE
是否比 Character.MIN_VALUE
更具可读性?不是真的。
在 classes 中定义它们相关的常量是进入 IMO 的方式。也就是说,并非所有常量都属于 Java
classes/interfaces/enums。一些常量(例如错误消息)最好放在消息 bundles/property 文件中。
"Should all constants be defined in a single file?"
绝对不是。在除最小程序之外的所有程序中,这将创建一个 contention/mess 点。与 'global variable' 反模式非常相似。
"Should constants be in their own files?"
同样,不。从广义上讲,常量分为三种类型,每一种都需要以各自略有不同的方式进行分组。
- 属于内部实现细节的常量,它们与使用它们的实现代码很接近。
- Public API 常量。那是构成 API 的公开 public 契约的一部分的常量,它们属于接近正在定义的 API。
- 程序的系统配置。这些常量属于系统的 bootstrap 代码。
我注意到一些项目喜欢将常量存储在它们自己的文件中,即在全局和主程序循环中使用的常量可能会使主文件混乱,所以他们可能希望将它们放在其他地方然后 reference/import file/class.
我了解到,在编写 OOP class 时,您希望将所有常量保留在 class 文件的 header 中,以便可以静态引用它们:
myCar.setColour(Colour.RED);
其中 RED
是 Colour
class 中的颜色常量。
拥有大量常量的好做法是什么,它们应该只是位于主文件的顶部,还是以任何方式明智地拥有一个ProgramConstants
class 是纯静态的,public 并且可供阅读?
我更喜欢将常量放入 classes 中它们在逻辑上属于的地方。
不要像ProgramConstants
那样把不相关的常量放到class中,因为你会创建一堆乱七八糟的常量,这将变得难以维护。
不,您不应该将所有常量放在主 class 的顶部或它们自己的 class 中,它们应该放在任何 class 逻辑上关联的地方与.
问题是,如果程序员看到一个通用的地方可以放置某些东西,例如常量文件,那么他们会将所有常量放在这里以维护模式,而他们应该将它们放在正确且合乎逻辑的位置.拥有一个大的常量文件使得使用常量变得更加困难,因为它们实际上是未分类的并且破坏了模块化。作为架构师,您的职责是避免设计带有此类陷阱的系统。
因此,举例来说,假设您有与 Java 应用程序的 运行 相关的系统属性,那么在您的主 class 中一定要有几个这样的常量。如果你最终在主 class 中有太多,那么将它们移到同一个包中的 SystemProperties class 中。当程序员需要几个常量供自己使用时,例如您示例中的颜色,他们应该创建自己的颜色 class,并将其放入与包含这些常量的功能关联的包中。
What is good practice for having a large amount of constants, should they just be at the top of your main file or is it in any way wise to have maybe a ProgramConstants class
常量的放置位置取决于常量的类型。
JDK中的Integer
class有一个叫做MIN_VALUE
的常量,它定义了一个int的最小值。 Character
class 定义了一个名为 MIN_VALUE
的常量,它定义了一个字符的最小值。
将上述方法与定义全局 WrapperConstants
class/enum 两个常量即 CHAR_MIN_VALUE
和 INT_MIN_VALUE
的方法进行比较。您很快就会为其他数据类型向该文件添加更多常量。(LONG_MIN_VALUE
、FLOAT_MIN_VALUE
等等...)
当您还想定义 MAX_VALUE
时会发生什么?看看你的 class 能多快爆炸?可读性怎么样。 WrapperConstants.CHAR_MIN_VALUE
是否比 Character.MIN_VALUE
更具可读性?不是真的。
在 classes 中定义它们相关的常量是进入 IMO 的方式。也就是说,并非所有常量都属于 Java
classes/interfaces/enums。一些常量(例如错误消息)最好放在消息 bundles/property 文件中。
"Should all constants be defined in a single file?"
绝对不是。在除最小程序之外的所有程序中,这将创建一个 contention/mess 点。与 'global variable' 反模式非常相似。
"Should constants be in their own files?"
同样,不。从广义上讲,常量分为三种类型,每一种都需要以各自略有不同的方式进行分组。
- 属于内部实现细节的常量,它们与使用它们的实现代码很接近。
- Public API 常量。那是构成 API 的公开 public 契约的一部分的常量,它们属于接近正在定义的 API。
- 程序的系统配置。这些常量属于系统的 bootstrap 代码。