我正在研究一个已经开发了几年的大型c ++系统.作为提高现有代码质量的努力的一部分,我们参与了一个大型的长期重构项目.
你知道一个很好的工具可以帮助我用C++编写单元测试吗?也许类似于Junit或Nunit?
任何人都可以为编写单元测试的方法提供一些很好的建议,这些模块是在没有单元测试的情况下编写的吗?
假设您有一个名为Customer的类,其中包含以下字段:
我们还要说,根据您的业务逻辑,所有Customer对象都必须定义这四个属性.
现在,我们可以通过强制构造函数指定每个属性来轻松地完成此操作.但是,当您被迫向Customer对象添加更多必需字段时,很容易看出它会如何失控.
我已经看到了在构造函数中加入20多个参数的类,使用它们只是一种痛苦.但是,或者,如果您不需要这些字段,则可能会遇到未定义信息的风险,或者更糟糕的是,如果您依赖调用代码来指定这些属性,则会引发对象引用错误.
有没有替代方案,或者你只需要决定X的构造函数参数是否太多,你不能忍受?
35线,55线,100线,300线?什么时候应该开始分手?我问,因为我有60行(包括评论)的功能,并且正在考虑将它分开.
long_function(){ ... }
Run Code Online (Sandbox Code Playgroud)
成:
small_function_1(){...}
small_function_2(){...}
small_function_3(){...}
Run Code Online (Sandbox Code Playgroud)
这些函数不会在long_function之外使用,因为较小的函数意味着更多的函数调用等.
你什么时候将一个函数拆分成更小的函数?为什么?
谢谢大家的答案,编辑列表并投票给出正确的答案,我会选择那个;)
我现在正在重构这些想法:)
最近几个月我对编码katas很感兴趣.我相信它们是磨练我的编程技巧和提高我在工作中编写的代码质量的好方法.
Katas可以在很多地方找到.喜欢..
http://schuchert.wikispaces.com/Katas
我发现这些是Katas的优秀资料库......我对其中一些人的尝试得到了极大的回报.
但是,我觉得到目前为止我见过的所有卡塔都有一个短暂的来临.他们似乎都不允许我练习重构坏代码.第一次学习如何编写干净的代码真是太棒了...但在我目前的工作中,我没有太多机会编写新代码.相反,我经常与遗留代码作斗争并试图弄清楚如何重构模块,消除依赖关系并减少耦合.
因此,我正在寻找一些可以用来磨练我重构遗留代码并将其转换为干净代码的技能的Katas.
有谁知道任何已存在的?我知道我在工作的时候会接受很多练习...但是我想磨练自己的技能,以便能够快速地看到如何分离依赖关系,并在课堂上分离关注点做得太多了.
我开始在Backbone项目中使用Facebook React,到目前为止它的表现非常好.
但是,我注意到我的React代码中出现了一些重复.
例如,我有几个类似于窗体的小部件,其状态为INITIAL,SENDING和SENT.按下按钮时,需要验证表单,发出请求,然后更新状态.this.state当然,状态保持在React内部,以及字段值.
如果这些是Backbone视图,我会提取一个被调用的基类,FormView但我的印象是React既不支持也不支持子类化来共享视图逻辑(如果我错了,请纠正我).
我在React中看到了两种代码重用方法:
我是否认为mixin和容器比React中的继承更受欢迎?这是一个刻意的设计决定吗? 将mixin或容器组件用于第二段中的"表单小部件"示例会更有意义吗?
这里有一个要点FeedbackWidget,并JoinWidget在其当前状态.它们具有类似的结构,类似的beginSend方法,并且都需要一些验证支持(还没有).
为什么Refactor ...在Xcode中变灰(禁用)?
我想重命名一堂课.
我正在为实现接口的类添加一个新方法,我喜欢使用"Extract Interface"重构,只需将该方法添加到接口即可.但似乎ReSharper似乎不支持向现有接口添加方法签名.
感觉我错过了一些东西,我确信它可以以某种方式完成.也许我应该首先将方法签名添加到接口,但这是我有时工作的方式.我错过了一些快捷方式,功能还是使用ReSharper错了?
你使用什么ReSharper 4.0 C#模板?
让我们用以下格式分享这些:
可选说明
快捷方式:快捷方式适用
于: [可用性设置]
// Resharper template code snippet
// comes here
Run Code Online (Sandbox Code Playgroud)
宏属性(如果存在):
偶尔我会遇到一些参数不舒服的方法.通常情况下,他们似乎是建设者.似乎应该有更好的方式,但我看不出它是什么.
return new Shniz(foo, bar, baz, quux, fred, wilma, barney, dino, donkey)
Run Code Online (Sandbox Code Playgroud)
我曾想过使用结构来表示参数列表,但这似乎只是将问题从一个地方转移到另一个地方,并在流程中创建另一个类型.
ShnizArgs args = new ShnizArgs(foo, bar, baz, quux, fred, wilma, barney, dino, donkey)
return new Shniz(args);
Run Code Online (Sandbox Code Playgroud)
所以这似乎不是一种改进.那么最好的方法是什么?
我多次听说过必须从项目中删除未使用的代码.然而,我不清楚"为什么?".
我没有删除的要点是:
有人可以解释删除(或保留)未使用的代码的优点吗?
提前致谢!
refactoring ×10
c# ×2
coding-style ×2
resharper ×2
c++ ×1
constructor ×1
function ×1
iphone ×1
javascript ×1
legacy-code ×1
mixins ×1
parameters ×1
reactjs ×1
templates ×1
unit-testing ×1
xcode ×1