该得墨忒耳定律指出你应该只给你关于直接了解对象说话.也就是说,不要执行方法链接与其他对象交谈.当您这样做时,您正在与中间对象建立不正确的链接,不恰当地将您的代码与其他代码耦合.
那很糟.
解决方案是针对您所知道的类,基本上公开简单的包装器,将责任委托给与其有关系的对象.
非常好.
但是,这似乎导致班级具有低凝聚力.它不再只是简单地对其所做的事情负责,但它也有代表在某种意义上,通过复制其相关对象的部分界面使代码更具凝聚力.
那很糟.
它真的会降低凝聚力吗?它是两个邪恶中的较小者吗?
这是发展的灰色区域之一,您可以在哪里讨论线路的位置,或者是否有强有力的,有原则的方式来决定在哪里划线,以及您可以使用哪些标准来做出决定?
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) 在Eclipse中,我有一个简单的Java项目,它包含一个名为(default package)的包,在这个包中我有一个类
我想将此包重命名为:com.myCompany.executabe
我试图选择(默认包)--->右键单击--->重构但现在只向我显示名为的单个语音:推断泛型类型参数但不能更改包名称的可能性
为什么?我在Eclipse中要做些什么来更改包的名称?
TNX
安德里亚
在使用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) 我们正在重构遗留的Web应用程序,因此"杀死"了相当多的JavaScript代码,但我们害怕因为不确定而删除我们认为是死代码的内容.是否有任何工具/技术可以在JavaScript中正确识别死代码?
几个星期前我与一些同事进行了重构讨论,我似乎是少数人认为"早期重构,经常重构"是一种很好的方法,可以防止代码变得混乱和不可维护.许多其他人认为它只属于项目的维护阶段.
如果您有意见,请为其辩护.
有没有办法通过Visual Studio中的一个或多个文件的快捷方式组织C#使用(删除和排序,单独或一起)?
我知道这可以通过选择一个文件的菜单来完成
Edit > IntelliSense > Organize Usings > Remove and Sort
但我想更快地做到这一点.我正在使用Visual Studio 2013 Express进行C#开发(想知道如何在旧版和其他版本中完成此操作).先感谢您.
我一直在玩测量大代码库的圈复杂度.
循环复杂性是通过程序源代码的线性独立路径的数量,并且有许多免费工具可供您选择的语言.
结果很有趣,但并不令人惊讶.也就是说,我知道最毛茸茸的部分实际上是最复杂的(评级> 50).但我发现有用的是,在决定从哪里开始重构时,我可以指出为每个方法分配一个具体的"坏"数字.
你使用圈复杂度吗?您找到的最复杂的代码是什么?
我已经拥有数千行Matlab代码,有些作为> 900行函数和一些充满function_name.m文件的目录.很难弄清楚一切正在做什么(或与之相关)或找出依赖关系.您可以建议将函数结构可视化,例如从哪个函数调用哪些函数以及按什么顺序调用?
我想像这样重构代码:
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)
?
refactoring ×10
java ×3
eclipse ×2
javascript ×2
c# ×1
code-metrics ×1
cohesion ×1
collections ×1
coupling ×1
dead-code ×1
guava ×1
jslint ×1
matlab ×1
metrics ×1
oop ×1