标签: refactoring

耦合,内聚和Demeter定律

得墨忒耳定律指出你应该只给你关于直接了解对象说话.也就是说,不要执行方法链接与其他对象交谈.当您这样做时,您正在与中间对象建立不正确的链接,不恰当地您的代码与其他代码耦合.

那很糟.

解决方案是针对您所知道的类,基本上公开简单的包装器,将责任委托给与其有关系的对象.

非常好.

但是,这似乎导致班级具有低凝聚力.它不再只是简单地对其所做的事情负责,但它也有代表在某种意义上,通过复制其相关对象的部分界面使代码更具凝聚力.

那很糟.

它真的会降低凝聚力吗?它是两个邪恶中的较小者吗?

这是发展的灰色区域之一,您可以在哪里讨论线路的位置,或者是否有强有力的,有原则的方式来决定在哪里划线,以及您可以使用哪些标准来做出决定?

oop refactoring coupling cohesion law-of-demeter

64
推荐指数
3
解决办法
7544
查看次数

JSLint背后有什么原因说"var语句太多"

JSLint(打开onevar标志)正在标记我的一些javascript代码,其中包含以下内容:

Problem at line 5 character 15: Too many var statements.

我很乐意解决这些错误,但我想知道,我是为了性能而做,还是因为这只是一种不好的做法,并且更有可能在我的javascript代码中引入错误.onevar旗帜背后的原因是什么?

我确实查看了var关键字的JSLint文档,但没有具体说明为什么同一函数中的多个var语句都不好.

这是一个例子的尝试.解释代码如何只从1个var语句中受益:

function Test(arg) {
   var x = arg + 1,
       y = cache.GetItem('xyz');
   if (y !== null) {
      // This is what would cause the warning in JSLint
      var request = ajaxPost(/* Parameters here */);

   }
}
Run Code Online (Sandbox Code Playgroud)

javascript refactoring jslint

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

如何在Eclipse中更改包名?

在Eclipse中,我有一个简单的Java项目,它包含一个名为(default package)的包,在这个包中我有一个类

我想将此包重命名为:com.myCompany.executabe

我试图选择(默认包)--->右键单击--->重构但现在只向我显示名为的单个语音:推断泛型类型参数但不能更改包名称的可能性

为什么?我在Eclipse中要做些什么来更改包的名称?

TNX

安德里亚

java eclipse refactoring

62
推荐指数
1
解决办法
14万
查看次数

在使用Guava转换集合时是否有一种优雅的方法来删除空值?

在使用Google Collections(更新:Guava)时,我有一个关于简化某些Collection处理代码的问题.

我有一堆"计算机"对象,我想最终收集他们的"资源ID".这样做是这样的:

Collection<Computer> matchingComputers = findComputers();
Collection<String> resourceIds = 
    Lists.newArrayList(Iterables.transform(matchingComputers, new Function<Computer, String>() {
    public String apply(Computer from) {
        return from.getResourceId();
    }
}));
Run Code Online (Sandbox Code Playgroud)

现在,getResourceId()可能会返回null(并且现在更改它不是一个选项),但在这种情况下,我想从结果String集合中省略null.

这是过滤掉空值的一种方法:

Collections2.filter(resourceIds, new Predicate<String>() {
    @Override
    public boolean apply(String input) {
        return input != null;
    }
});
Run Code Online (Sandbox Code Playgroud)

你可以像这样把所有这些放在一起:

Collection<String> resourceIds = Collections2.filter(
Lists.newArrayList(Iterables.transform(matchingComputers, new Function<Computer, String>() {
    public String apply(Computer from) {
        return from.getResourceId();
    }
})), new Predicate<String>() {
    @Override
    public boolean apply(String input) {
        return input != null; …
Run Code Online (Sandbox Code Playgroud)

java collections refactoring guava

59
推荐指数
4
解决办法
3万
查看次数

找到死的JavaScript代码?

我们正在重构遗留的Web应用程序,因此"杀死"了相当多的JavaScript代码,但我们害怕因为不确定而删除我们认为是死代码的内容.是否有任何工具/技术可以在JavaScript中正确识别死代码?

javascript refactoring dead-code

59
推荐指数
7
解决办法
3万
查看次数

你应该多久重构一次?

几个星期前我与一些同事进行了重构讨论,我似乎是少数人认为"早期重构,经常重构"是一种很好的方法,可以防止代码变得混乱和不可维护.许多其他人认为它只属于项目的维护阶段.

如果您有意见,请为其辩护.

refactoring

56
推荐指数
8
解决办法
9082
查看次数

在Visual Studio 2013中用什么键盘快捷键来组织C#使用?

有没有办法通过Visual Studio中的一个或多个文件的快捷方式组织C#使用(删除和排序,单独或一起)?

我知道这可以通过选择一个文件的菜单来完成

Edit > IntelliSense > Organize Usings > Remove and Sort

但我想更快地做到这一点.我正在使用Visual Studio 2013 Express进行C#开发(想知道如何在旧版和其他版本中完成此操作).先感谢您.

c# refactoring visual-studio visual-studio-2013

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

你认为圈复杂度是一个有用的衡量标准吗?

我一直在玩测量大代码库的圈复杂度.

循环复杂性是通过程序源代码的线性独立路径的数量,并且有许多免费工具可供您选择的语言.

结果很有趣,但并不令人惊讶.也就是说,我知道最毛茸茸的部分实际上是最复杂的(评级> 50).但我发现有用的是,在决定从哪里开始重构时,我可以指出为每个方法分配一个具体的"坏"数字.

你使用圈复杂度吗?您找到的最复杂的代码是什么?

refactoring metrics cyclomatic-complexity code-metrics

53
推荐指数
6
解决办法
8915
查看次数

如何在MATLAB中可视化项目结构?

我已经拥有数千行Matlab代码,有些作为> 900行函数和一些充满function_name.m文件的目录.很难弄清楚一切正在做什么(或与之相关)或找出依赖关系.您可以建议将函数结构可视化,例如从哪个函数调用哪些函数以及按什么顺序调用?

matlab refactoring visualization

53
推荐指数
5
解决办法
1万
查看次数

如何在Eclipse中重构变量类型?

我想像这样重构代码:

int x=4;
int y=x;
System.out.println(y);
Run Code Online (Sandbox Code Playgroud)

我怎样才能在Eclipse中自动执行此操作,因此x的类型提升为long会导致因变量更改其类型:

long x=4;
long y=x;
System.out.println(y);
Run Code Online (Sandbox Code Playgroud)

java eclipse refactoring

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