Tag: 重构

使用许多子类重构抽象Java类

我正在寻找关于重构这种情况的最佳方法的想法(更好的设计,最小的努力)。 从以下示例开始抽象类(实际有更多字段,方法和抽象方法): abstract class Car { private int manufactureYear; // … many more fields that are hard to clone public Car(int manYear) { this.manufactureYear = manYear; } abstract public Color getColor(); abstract public int getNumCylinders(); } 有很多子类(比如100)扩展了这个类。 这些儿童课程被认为是汽车的“规格”。 以下是两个例子: class CarOne extends Car { private static Color COLOR = Color.Red; private static int CYLINDERS = […]

在TDD中,在重构期间将主类拆分为子类

我试图关注TDD并且对它有点新意。 我有一个要实现的接口(Java)。 所以我开始为接口行为编写测试用例,使它们失败并通过添加或修改代码来修复它们。 但是,正如我看到主类的大小越来越大,我将主类打破成单独的类。 但对于某些子类,我意识到最好单独测试它们并在主类测试用例中模拟它们。 但是当我这样做时,我不得不再次重写主类测试用例(对于移动的代码),导致大量的流失和重复工作。 我在实施TDD方法方面做错了吗?

如何外化maven构建文件?

我遇到了如何以XML格式对配置文件进行版本化的问题。 最简单的方法是编写XSLT更新。 应用程序的每个版本都有自己的XSLT更新。 所有这些更新文件都足够小,可以通过IDE管理,特别是它的DIFF工具。 由于该项目已经开发为Maven2 Java逻辑解决方案是通过maven构建文件触发这些更新。 这就是今天应用一组更新的部分: org.codehaus.mojo xml-maven-plugin compile transform config/xsltUpdates/input config/xsltUpdates/update1-8-3.xsl config/xsltUpdates/update1-8-3 config/xsltUpdates/update1-8-3 config/xsltUpdates/update1-8-9.xsl config/xsltUpdates/update1-8-9 config/xsltUpdates/update1-8-9 config/xsltUpdates/update1-9-0.xsl config/xsltUpdates/update1-9-0 config/xsltUpdates/update1-9-0 config/xsltUpdates/update1-10-0.xsl config/xsltUpdates/update1-10-0 config/xsltUpdates/update1-10-0 config/xsltUpdates/update1-10-0-1.xsl config/xsltUpdates/update1-10-0-1 config/xsltUpdates/update1-10-0-1 config/xsltUpdates/update1-10-0-2.xsl config/xsltUpdates/update1-10-0-2 config/xsltUpdates/update1-10-0-2 config/xsltUpdates/updateCurrent.xsl config/xsltUpdates/output net.sf.saxon saxon 8.7 我想在一些properties / xml文件导入中外化有关transformationSet的信息。 我的pom.xml文件将更清晰,外部化信息更易于维护。 我怎样才能做到这一点? 我可以在构建文件中使用一些迭代控制语句吗? 有没有办法从一些外部文件导入数据?

使用JSch库在Java中获取会话和SFTP通道

我正在为SFTP使用JSch库。 我需要在SFTP服务器上做几个操作,比如移动其他目录中的远程文件,拉文件等。对于所有这些操作,我需要Session然后从中获取Channel然后将其转换为ChannelSftp 。 这是多余的步骤。 所以我想把它抽象成一个private方法。 private ChannelSftp getChannelSftp() throws JSchException { java.util.Properties config = new java.util.Properties(); config.put(“StrictHostKeyChecking”, “no”); JSch jsch = new JSch(); Session session; session = jsch.getSession(VENDOR1_USERID, VENDOR1_SERVER, VENDOR1_PORT); session.setPassword(VENDOR1_PASSWORD); session.setConfig(config); session.connect(); ChannelSftp channelSftp = null; Channel channel = session.openChannel(“sftp”); channel.connect(); channelSftp = (ChannelSftp) channel; return channelSftp; } 但是在SFTP操作之后,我需要断开与通道和会话的连接。 使用上面的方法,虽然我可以在调用方法中断开Channel但是我不能断开与Session连接,因为我没有可能是泄漏的实例所以我现在将它分成getSession()方法,现在ChannelSftp创建是所有方法都重复。 什么是更好的设计/重构方法 ? private Session […]

将AWT应用程序转换为SWT / JFace

我目前正在考虑将一个中小型项目从AWT转换为SWT,尽管Swing还没有完全脱离图片。 我正在考虑将主窗口转换为SWT_AWT桥接对象,但我不知道这个工作的语义如何。 之后,我计划更新对话框的对话框,但不一定在一个版本中。 这可能吗? 有人做了这样的转换,可以给我一些提示吗? 那里甚至可能有教程吗? 甚至可能有一个工具可以自动化部分内容吗? 我试过谷歌搜索,但无济于事。 更新:另外一件事是:目前,这是一个netbeans项目。 可能有所帮助,我不知道。

Java中构造函数中的长参数列表

可能重复: 重构具有太多(6+)参数的方法的最佳方法是什么? 如果构造函数有一个很长的参数列表,我们应该考虑它的坏样式并重构它吗? 如果有,怎么样?

Eclipse – 记录并应用移动并将重构重命名为另一个工作区

我目前正在开发一个大型java项目,其中有很多子模块由不同的团队处理。 其中一些团队正在构建“框架”,其他团队正在构建基于框架的“应用程序”。 当框架人员移动或重命名一个类时,应用程序人员无论在哪里使用重构的框架类都会遇到编译错误。 Eclipse ( Galileo Release )中是否有一种方法可以记录更改并更新另一个工作区中的引用? 到目前为止我尝试过的是在重命名重构期间创建一个重构脚本,但是当我尝试将该脚本应用到另一个工作区时,它失败了The refactoring ‘Rename Type’ (org.eclipse.jdt.ui.rename.type) cannot be performed, since its input ‘xxx.TestClass” does not exists 。好吧,它不存在(不再)好了,但我想要的是我的项目中xxx.TestClass所有引用都改为xxx.MyRenamedTestClass Eclipse中是否有办法使用内置function或现有插件来完成此操作,还是我必须自己编写一个? 谢谢你的帮助! 编辑:到现在为止我发现“Migrate JAR”-Plugin提供了我正在寻找的function,虽然我们用Maven而不是Eclipse构建我们的JAR。 我现在要查看源代码,找出可以重用的部分。

一长串if / else / execute代码分支的最佳设计模式/方法

我有一个“遗留”代码,我想重构。 代码基本上是对服务器进行远程调用并获得回复。 然后根据回复执行相应的。 代码骨架示例: public Object processResponse(String responseType, Object response) { if(responseType.equals(CLIENT_REGISTERED)) { //code //code … } else if (responseType.equals(CLIENT_ABORTED)) { //code //code…. } else if (responseType.equals(DATA_SPLIT)) { //code //code… } etc 问题是有很多if / else分支,并且每个内部的代码都不是微不足道的。 因此很难维护。 我想知道这个最好的模式是什么? 我有一个想法是创建一个方法名称与responseType相同的单个对象,然后在processResponse内部使用reflection调用与responseType同名的方法。 这将清理processResponse,但它会将代码移动到具有许多/多种方法的单个对象,我认为reflection会导致性能问题。 是否有一个很好的设计方法/模式来清理它?

自动将公共更改为私有(Java)

我正在对代码进行重构,从其他语言翻译成Java,我想自动完成。 我的问题是我有很多非私有的方法,但只是在声明它们的同一个类中被调用,我想让它们变成私有的。 我有很多课程,我想如果有一些东西可以帮助我半自动地做,我想知道它。 你知道我是否可以寻找这些方法让它们快速私密化? 我正在使用Eclipse。

替换序列化数据中的类名

我想在序列化数据流中用“com.newPackage.className”替换字符串“com.oldpackage.className”。 从DB读取此序列化数据并在替换字符串后更新。 我在做同样的事情时遇到了一些问题。 如果您已经猜到了,这是重构练习的一部分。 是否有任何库可以帮助我操作序列化数据? 如果您还可以请注意任何预防措施或警告,这将是非常有帮助的。 非常感谢,克里斯。 PS:旧类和新类都没有声明serialversion ID作为其字段的一部分。