Ideal way to organize Java constants
我们有一个基于旧JDK 1.4的大型项目。我们已经将Web应用程序迁移到JDK1.6,但代码中仍然存在许多效率低下的实践和糟糕的设计。
关于单个Java文件中的主要疼痛点巨大Java类2500行+代码。像这样的文件太多了。
为了重构类,我首先删除了常量,并将常量放在不同的constants.java文件中。但是由于应用程序中有如此多的常量,所以常量文件有增长到巨大比例的风险。
对于开发人员采用什么策略来保持代码的整洁和可维护性,我将不胜感激。
将常量保存在它们相关的类中,不要觉得有义务提取它们。它可以清除类的代码,但在文件中混合不相关的常量并不是一个改进。
把事情联系在一起。
而且,您也可以在可能/有用时将它们转换为枚举(但这可能需要一些重构)。
将所有常量放在一个文件中是一个糟糕的主意!尤其是Uber常数反模式,所有常数都在一个
这意味着每次导入这个uber常量文件时,您都会混合许多与之无关的信息,并创建不需要的依赖项。结合起来的东西应该放在一个
假设
它还意味着您有一个单一的平面名称空间来尝试创建不冲突的名称,然后这些名称就不明显它们属于什么以及应该如何使用。这从来不是一个积极的锻炼。
在设计和重构时,您应该始终:
争取高凝聚力,这意味着尽可能地保持相关事物的紧密联系。
争取松耦合,这意味着不要让不相关的事情泄漏到其他不相关的范围。
争取自我记录可维护代码,几十或数百个
在2012年,c型常数是一个糟糕的解决方案,当你现在使用
在我看来,仅仅把常量放在
编辑:确切地说,我实际上使用Java ME应用程序,所以它只是一种"模仿"我无法拥有的枚举的方法,在抽象类中有一个"受控词汇表"(我想念所有的JavaEE特性……)
我想分享一个几年前我看到的常量的设计模式,也许能有所帮助。
首先创建一个baseconstant文件。这将保存所有包可以使用的所有全局常量。
现在,在应用程序的每个子包中,创建一个只与子包相关的常量文件。如果你有。名为login的子包只将与login相关的常量放在那里。但关键是扩展baseconstants。这样,您就可以在IDE选择器中看到所有的全局常量,但是当您打开文件时,只看到包常量。也就是说,我认为常量文件会变得非常重、重复,而且很难读取。
我的意思是……
1 2 3 4 5 6 |
现在,在所有其他包中创建这样的文件:
1 2 3 4 5 |
号
在您的IDE中键入"myPackageInstants"时,您应该看到整个应用程序的所有常量。
对于访问此页面的人。
如果不想维护多个常量文件,下面是更好的组织方法。
1 2 3 4 5 6 7 8 9 10 | public interface Constants { public static final String CREATE_USER ="createUser"; // Nested Interface. public interface ProjectConstants { public static final String CREATE_PROJECT ="createProject"; public static final String INVALID_SESSION ="Invalid Session"; // As you know they are implicity public static final. } }// Accessed as: Constants.ProjectConstants.CREATE_PROJECT |
更新:
作为最佳实践,最好使用类(参见注释)。谢谢开普勒人。)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | public final class Constants { private Constants() { // restrict instantiation } public static final double PI = 3.14159; public static final double PLANCK_CONSTANT = 6.62606896e-34; } import static Constants.PLANCK_CONSTANT; import static Constants.PI; public class Calculations { public double getReducedPlanckConstant() { return PLANCK_CONSTANT / (2 * PI); } } |
号
您是否尝试对所有常量使用枚举?据我所知,这是自Java 1.5以来的首选方式。
http://docs.oracle.com/javase/1.5.0/docs/guide/language/enums.html
我从来没有听说过把所有的常量都放在一个Java文件中。最好的方法是将与类相适应的常量放在它们自己中,但是用大写字母和下划线命名它们,如下面的例子常量
我认为如果你有超过2500个位置的多个Java文件,那么在哪里放置常量的决定应该是你的最小问题。您应该清楚地了解重组后的系统将是什么样子的。这可能比决定把常量和其他句法考虑放在哪里困难得多,但仍然需要先做。