Design patterns 常数和可维护性

Design patterns 常数和可维护性,design-patterns,constants,Design Patterns,Constants,我有一个关于良好编程实践的简单问题。具体来说,我对处理分组常量的正确方法感到好奇。在学校里,他们教我们把常数放在第一次声明它们的文件的顶部(通常是一个类文件,教授有一些变化)。现在,我已经在行业中的几个地方看到了所有常量都被拉出并卷成一个大的include类型文件 在第一种情况下,提取常量是有意义的,因为这是手机游戏的代码,必须快速移植到各种各样的设备上,这提供了一个集中的工作场所。但是,后来,我发现重复这种做法是一种完全不同的情况(公共事业的内部代码),几乎没有理由解释为什么会这样(基本上,“

我有一个关于良好编程实践的简单问题。具体来说,我对处理分组常量的正确方法感到好奇。在学校里,他们教我们把常数放在第一次声明它们的文件的顶部(通常是一个类文件,教授有一些变化)。现在,我已经在行业中的几个地方看到了所有常量都被拉出并卷成一个大的include类型文件

在第一种情况下,提取常量是有意义的,因为这是手机游戏的代码,必须快速移植到各种各样的设备上,这提供了一个集中的工作场所。但是,后来,我发现重复这种做法是一种完全不同的情况(公共事业的内部代码),几乎没有理由解释为什么会这样(基本上,“因为他一直都是这样做的”)


那么,最佳实践是什么呢?我知道这似乎很平常,但我一直被告知,尽早养成好习惯是成功的关键。

要给出一个过于简单的答案,我认为最好把它们放在你希望找到的地方。也就是说,对它们进行分类。这涉及到。这样做的好处是,当你需要它们时,你会发现它们更容易。您可以轻松地只包含所需的常量,而不会让其他未使用的常量污染您的命名空间


另一个重要的注意事项是,如果可能,将相关常量分组到枚举中。例如,对齐常量将进入枚举对齐。

平等对待所有常量通常过于简单。每一个在其上下文中都有不同的含义,我对待它们的方式也相应地有所不同。下面是一个小的上下文表,对比我在这个上下文中如何处理常量。如果你认为有更好的方法,请纠正我

  • 配置参数:=>在可能的情况下,配置文件或数据库的代码失效
  • UI字符串:=>在资源文件中(便于维护和本地化)
  • 可能的
    enum
    s:enum在同一上下文中很好地包装了多个常量(例如,一周中的几天、连接状态…)。我通常将定义放在使用它的同一个包中,或者如果多个程序集/组件将使用它,则放在共享库中
  • 全局/静态对象:我检查我的设计,看看是否可以应用
    singleton
    factory
    模式(或在框架中注册对象)
  • 测试期望:在测试方法中,为了可读性,我通常保持原样
  • “神奇”数字:我很少使用它们;可能会将它们留在语义相关的类中
其他常量有自己的上下文。我喜欢将常数移出代码,因为无论听起来多么矛盾,常数往往会改变

出于同样的原因,将所有常量放在一个大文件中是不好的。假设您的一个程序集仅依赖于常量X。即使常量Y发生更改,也必须重新编译此程序集,并且此更改不应影响它