Tag: 重构

如何模块化(大型)Java App?

我手头有一个相当大的(几个MLOC)应用程序,我想分成更易于维护的单独部分。 目前,该产品由大约40个Eclipse项目组成,其中许多项目具有相互依赖性。 仅这一点使得连续构建系统变得不可行,因为每次签入都需要非常重建。 是否有“最佳实践”的方法 识别可以立即分离的部分 直观地记录相互依赖性 解开现有代码 处理我们需要应用于库的“补丁”(目前通过将它们放在实际库之前的类路径中来处理) 如果有(免费/开放)工具来支持这一点,我会很感激指点。 尽管我对Maven没有任何经验,但它似乎强制采用非常模块化的设计。 我现在想知道这是否可以迭代地进行改装,或者如果一个项目使用它必须从一开始就考虑模块化。 编辑2009-07-10 我们正在使用Apache Ant / Ivy拆分一些核心模块。 非常有用且设计精良的工具,不像maven那样强加给你。 我写了一些更一般的细节和个人意见,说明我们为什么在我的博客上这样做 – 这里发布的时间太长,也许对每个人都不感兴趣,所以请自行决定: www.danielschneller.com

重构大数据对象

重构大型“仅状态”对象有哪些常见策略? 我正在研究一个特定的软实时决策支持系统,该系统可以对国家空域进行在线建模/模拟。 该软件消耗大量实时数据馈送,并对空域中的大量实体的“状态”进行每分钟一次的估计。 这个问题整齐地分解,直到我们达到目前最低级别的实体。 我们的数学模型估计/预测每个这些实体的过去和未来几个小时的时间线的50个参数,大约每分钟一次。 目前,这些记录被编码为具有许多字段的单个Java类(一些字段被折叠到ArrayList )。 我们的模型正在不断发展,并且各个领域之间的依赖关系还没有一成不变,因此每个实例都会在一个复杂的模型中漫游,随着它的进展积累设置。 目前我们有类似下面的东西,它使用构建器模式方法来构建记录的内容,并强制执行已知的依赖项(作为程序员错误的检查演变模式。)一旦估计完成,我们使用.build()类型方法将以下内容转换为不可变forms。 final class OneMinuteEstimate { enum EstimateState { INFANT, HEADER, INDEPENDENT, … }; EstimateState state = EstimateState.INFANT; // “header” stuff DateTime estimatedAtTime = null; DateTime stamp = null; EntityId id = null; // independent fields int status1 = -1; … // dependent/complex fields… … goes on for […]

重构代码(如果没有)

我试图重构代码,我遇到了这段代码。 你能否在其中建议任何重构,请说明你使用的折射。 private void setUpBag(String language){ if(language.equals(“english”)){ /* add letters with English distribution to bag */ } else if(language.equals(“french”)){ /* add letters with French distribution to bag */ } else if(language.equals(“russian”)){ /* add letters with Russian distribution to bag */ } else{ throw new IllegalArgumentException(“Unknown language”); } }

方法的擦除与类型中的另一种方法相同

以下是一个类中的两种方法 class Developer和Student是不同的,不共享任何父级。 以下两种方法都有相同的代码和方法,两个对象都有同名的ex。 getStartDate。 class hierarchyValidator { private LocalDate[][] getArrayOfTimespan(List developers) { //here i have to call some method on developer from list LocalDate startDate = developer.getStartDate(); …. } private LocalDate[][] getArrayOfTimespan(List students) { //here i have to call some method on student from list LocalDate startDate = student.getStartDate(); ….. } } 显示错误方法的擦除与类型中的另一种方法相同 我理解同一网站上其他post的错误背后的原因。 […]

System.out.println从多个java源文件中删除/注释

我想从我的java代码中删除/注释所有出现的System.out.println 。 if , if else , for , while或任何if else ,此System.out.println可能在内部。 由于源代码文件较大,我无法手动执行此操作。 请帮我自动化这个过程。 是否有任何重构工具可用于此任务? 我可以使用eclipse JDT吗?

使用Java中的import语句自动删除显式包声明

我有一个由其他人创建的项目,其中包含数千个类文件,并且对于任何类的每个引用都明确键入了包名。 看起来代码是逆向工程的。 是否有一个很好的Java工具可以重构代码,以便从类引用中删除显式类型的包前缀并移入import语句。 先谢谢你。 编辑: 我想一个例子会有所帮助。 我想把import放在最顶层,我不关心有多少import。 javax.swing.JButton button1 = new javax.swing.JButton(); 想象一下上面的代码,但绝对无处不在成千上万的类文件中成千上万行代码。 我希望能够删除所有的前缀,只是有一个很好的导入javax.swing.JButton; 在每个类文件的顶部。

在方法中重构多个if-else条件

我正在重构我现有的代码。 它实际上工作正常,但它有点混乱,多个if-else条件检查一个变量的值,并将第二个变量的值更改为从固定枚举结构获取的更新值。 else if (var1 == ‘valueX’) { if (var2 == MyEnum.A) var2 = MyEnum.B; else if (var2 == MyEnum.B) var2 = MyEnum.C; else if (var2 == MyEnum.C) var2 = MyEnum.D; else if (var2 == MyEnum.D) var2 = MyEnum.A; } else if (….) { ..similar block of conditionals } 我有点困惑的是,重构和清理这段代码的最佳方法是什么。 你会建议使用开关吗? 还是更优雅的东西? 提前致谢!

如何使用JDT以编程方式重命名方法

我的目标是以编程方式为Java源文件中的方法调用Refactor >> Rename Eclipse命令。 重命名方法也应该将更改应用于使用/引用此方法的所有实例。 我相信JDT有一个重构API,但无法找到相同的任何文档或教程。 有人可以指出我正确的方向。 编辑:运行时不需要更改。

空抽象类是不好的做法,为什么?

我们的代码库中有几个空的抽象类。 我觉得很难看。 但除了这个非常愚蠢的原因(丑陋)之外,我应该重构它(例如空的界面)吗? 否则,代码是健壮的并经过充分测试。 因此,如果它只是出于“美学”的原因,我将通过并让空的抽象类保持不变。 你怎么看? 编辑: 1)通过“空抽象类”,我的意思是: public abstract class EmptyAbstractClass {} 2)“空虚”的原因:Hibernate。 我根本没有掌握这个持久性框架。 我只是理解一个接口不能映射到一个表,并且由于这个技术原因,一个类比接口更受欢迎。

调用整个应用程序的图表

是否有一个非玩具工具可以创建整个应用程序的调用图? 我并不是指通过逐个方法指向获取图片或绘制调用图。 我需要一个可以通过编程方式访问的调用图,即工具应该以文本模式(例如XML)将其刷新到文件中,或者在内存中构建调用图(这对于大型应用程序来说会成为问题)。 内置在DB中的调用图会很棒。 静态和动态呼叫图都是需求的; 虽然静态更有趣,但事实上它过于活跃是可以接受的。 到目前为止我尝试过Soot。 但是,它甚至无法处理像FreeCol这样的中型项目(Java源代码可用)。 Soot在该项目上耗尽了1.5GB内存,然后JVM崩溃,如下所述: http : //www.sable.mcgill.ca/pipermail/soot-list/2008-July/001828.html 如上所述,有人可以建议生成调用图的工具吗? Java或.NET语言都可以。 最诚挚的问候,Sarge