标签: refactoring

如何使用IntelliJ IDEA应用"移动方法"重构?

我希望能够在IntelliJ IDEA中将实例方法从一个类移动到另一个类(来自Fowler的"重构"中的"Move方法").不幸的是,当我尝试"Move ..."(cmd:F6)时,它告诉我"没有方法有引用类型.你想让方法静态然后移动吗?" 我不想让我的方法静态,我希望它是另一个类的实例方法.

我的代码示例:

public class TheClass {

  public void doStuff(){
     int i = themethod();
  }

  private int theMethod() {
    System.out.println( "Hello World!" );
    return 0;
  }
}

public class OtherClass {

}
Run Code Online (Sandbox Code Playgroud)

说我想移动theMethodTheClassOtherClass.在IDEA中是否有自动重构,如果是这样的话:我该如何应用它?

refactoring intellij-idea

23
推荐指数
3
解决办法
1万
查看次数

如何在Java中将可执行块作为参数传递?

有没有办法将可执行块作为参数传递给静态方法?有可能吗?例如,我有这种方法

public static void someMethod(boolean flag, Block block1, BLock block2) {
    //some other code
    if(flag)
        block1.execute();
    else block2.execute();
    //some other code
}
Run Code Online (Sandbox Code Playgroud)

或类似的东西.它实际上比这更复杂,我只是简化了问题.我正在尝试重构我的项目,我创建了一个包含我的类使用的静态方法的通用实用程序类.

java refactoring code-design

23
推荐指数
1
解决办法
9913
查看次数

重构代码:什么时候做?

自从我开始使用.NET以来,我一直在创建Helper类或Partial类,以保持代码位于并包含在自己的小容器中等.

我想知道的是使代码尽可能干净和完美的最佳实践.

显然干净的代码是主观的,但我在谈论什么时候使用东西(不是如何使用它们),如多态,继承,接口,类以及如何更恰当地设计类(使它们更有用,而不仅仅是说' DatabaseHelper',正如一些人认为代码中的这种不良做法闻起来wiki).

是否有任何资源可能有助于这种决策?

请记住,我甚至没有开设过CS或软件工程课程,而且教学资源在现实生活中相当有限.

c# vb.net refactoring coding-style

22
推荐指数
3
解决办法
1万
查看次数

大规模重构战略

我目前正在处理一段代码,其中逻辑和数据访问都存在于GUI类中.显然,我想改善这种情况.

目前的结构基本上是:

  • 泥的大球

最终目标是实现类似DDD的结构:

  • DAL
  • 领域模型
  • 服务层
  • 演示模型
  • GUI

那么,你会如何解决这个问题呢?

legacy refactoring

22
推荐指数
2
解决办法
3413
查看次数

构造函数参数 - 经验法则

通常,类构造函数应该接受的参数的最大数量是多少?我正在开发一个需要大量初始化数据的类(目前有10个参数).但是,具有10个参数的构造函数感觉不对.这让我相信我应该为每个数据创建一个getter/setter.不幸的是,getter/setter模式不会强制用户输入数据,没有它,对象的表征就不完整,因此无用.思考?

java refactoring design-patterns

22
推荐指数
4
解决办法
1万
查看次数

如何在C++中抽象出重复的try catch模式

我有一个模式,重复几个成员函数,如下所示:

int myClass::abstract_one(int sig1)
{
  try {
    return _original->abstract_one(sig1);
  } catch (std::exception& err) {
    handleException(err);
  } catch (...) {
    handleException();
  }
}

bool myClass::abstract_two(int sig2)
{
  try {
    return _original->abstract_two(sig2);
  } catch (std::exception& err) {
    handleException(err);
  } catch (...) {
    handleException();
  }
}

[...]

int myClass::abstract_n(bool sig3a, short sig3b)
{
  try {
    return _original->abstract_n(sig3a, sig3b);
  } catch (std::exception& err) {
    handleException(err);
  } catch (...) {
    handleException();
  }
}
Run Code Online (Sandbox Code Playgroud)

其中抽象一个到n是纯虚拟抽象接口用于其的方法myClass_original是具体实现.

我不喜欢这个模式在代码中重复,并希望找到一种方法来消除重复try/ catch模式和代码作为单个抽象,但我想不出一个在没有宏的情况下在C++中执行此操作的好方法.我认为有一种方法可以让模板更好地完成这项工作.

请建议一种简洁的方法来重构此代码以抽象出重复的模式.

c++ refactoring templates exception

22
推荐指数
2
解决办法
6317
查看次数

不推荐使用Java Date getDate(),重构为使用日历但看起来很难看

Eclipse警告我正在使用不推荐使用的方法:

eventDay = event.getEvent_s_date().getDate();
Run Code Online (Sandbox Code Playgroud)

所以我把它改写成了

eventDay = DateUtil.toCalendar(event.getEvent_s_date()).get(Calendar.DATE);
Run Code Online (Sandbox Code Playgroud)

它似乎工作,但它看起来很难看.我的问题是我是否以最好的方式重构了这个?如果没有,你会如何重构?我需要存储在bean中的日期的日期编号.

我最终在我的DateUtils中添加了一个方法来清理它

eventDay = DateUtil.getIntDate(event.getEvent_s_date());

public static int getIntDate(Date date) {
    return DateUtil.toCalendar(date).get(Calendar.DATE);
}
Run Code Online (Sandbox Code Playgroud)

java refactoring date

22
推荐指数
3
解决办法
5万
查看次数

Eclipse JDT:是否有重构用setter/getter方法替换直接字段访问?

我知道我可以在Eclipse源代码菜单中为字段生成setter和getter,但我很惊讶它不提供用新调用方法调用来替换直接字段访问器.

有谁知道如何做到这一点,手动搜索和替换?

谢谢!

java eclipse refactoring eclipse-jdt getter-setter

22
推荐指数
1
解决办法
2354
查看次数

使用"功能分支"与重构兼容吗?

" 特征分支 " 是指每个特征在其自己的分支中开发,并且仅在经过测试并准备发运时才合并到主线中.这允许产品所有者选择进入给定货件的功能以及如果更重要的工作进入而部分写入的"停放"功能(例如,客户打电话给MD进行投诉).

" 重构 "正在改变代码以改进其设计,从而降低变更成本.如果不继续这样做,你往往会得到更难以编写测试的代码库.

在现实生活中,总会有客户销售新功能,并且由于政治原因,所有客户都必须看到"他们的"功能组正在取得进展.因此很少有时间没有很多半成品功能坐在树枝上.

如果已经进行了任何重构,那么"特征分支"中的合并变得更加困难,如果不是不可能的话.

我们只是不得不放弃能够进行任何重构吗?

另请参阅" 如何处理重构与合并需求之间的紧张关系?"

version-control refactoring branch feature-branch

22
推荐指数
3
解决办法
1963
查看次数

这真的是一种改进(当内部范围处于循环中时,将var移动到内部范围)?

Resharper推荐这些vars:

List<string> senderDeviceIDList;
string senderDeviceID;
. . .
            foreach (var item in PlatypiIds)
            {
                senderDeviceIDList = await GetSenderDeviceIDForSenderID(item);
                senderDeviceID = senderDeviceIDList[0];
Run Code Online (Sandbox Code Playgroud)

...可以在内部范围内声明,如下所示:

    foreach (var item in PlatypiIds)
    {
        List<string> senderDeviceIDList = await GetSenderDeviceIDForSenderID(item);
        string senderDeviceID = senderDeviceIDList[0];
Run Code Online (Sandbox Code Playgroud)

......但那真的"更好"吗?这不会导致变量被声明N次(每个foreach循环一次)吗?

c# resharper refactoring scope

22
推荐指数
2
解决办法
4607
查看次数