Testing 干净的代码、测试和可重用性澄清
旨在Testing 干净的代码、测试和可重用性澄清,testing,reusability,code-cleanup,Testing,Reusability,Code Cleanup,旨在清洁代码和测试。每个函数/方法都应该做一件事。这就是理论。为了说明这一点,我想与大家分享一些代码,然后提问 假设我们需要一个方法,如果条件为true,而条件为false,则该方法将返回一个玩家列表 第一种方法:一种方法: 第二种方法 playerId的公共列表(int-InputNumber) { returnnewlist(newint[]{1,2,3});//返回包含项的列表 } 我的问题是: 您在编码中遵循并应用哪种方法。 对我来说,第二种方法是可测试的、可重用的,每种方法都完全按
清洁代码
和测试
。每个函数/方法都应该做一件事。这就是理论。为了说明这一点,我想与大家分享一些代码,然后提问
假设我们需要一个方法,如果条件为true,而条件为false,则该方法将返回一个玩家列表
第一种方法:一种方法:
第二种方法
playerId的公共列表(int-InputNumber)
{
returnnewlist(newint[]{1,2,3});//返回包含项的列表
}
我的问题是:
您在编码中遵循并应用哪种方法。
对我来说,第二种方法是可测试的、可重用的,每种方法都完全按照它的设想去做。但这不只是书本上的理论吗?我读了很多代码,但它并不尊重这种模式
你对此有何看法?这取决于(tm)。这取决于当您将代码分解为更小的方法时,是否使代码更干净、更易于理解
就个人而言,我会保持外部接口不变(该方法可以返回一个填充列表或空列表),否则,如果您的客户机需要执行代码if/else子句,则可能会泄漏逻辑。此外,我将使用一种称为“两个抽象级别的代码”或“每个方法应降低一个抽象级别”的方法。通过这样做,最终的代码可能看起来像
public List<int> ListOfPlayersIDs(int InputNumber)
{
if (methodDescribingTheBusinessCondition()) {
return methodDescribingPositiveOutcome();
} else {
return methodNameDescribingNegativeOutcome();
}
}
playerId的公共列表(int-InputNumber)
{
if(方法描述BusinessCondition()){
return methodDescriptingPositiveOutCome();
}否则{
返回MethodNameDescriptingNegativeOutName();
}
}
我们的想法是,所有这些都应该像“普通”英语一样阅读,这样,阅读代码的人就可以在不必知道所有细节的情况下了解正在发生的事情。在这里,每个方法也只做一件事,协调整个事情的方法通常称为“策略”(正如它描述的功能)
如果您的方法很简单,那么这种抽象级别可能会使其更难理解
最后但并非最不重要的一点是,这一方法在几本书中进行了解释(干净的代码非常具体),它被用作专业开发中的一个良好实践。干净的代码(这本书)是我的终极参考,如果所有程序员都尊重那里的方法和方法,我会很高兴。像“普通”英语一样阅读,我认为这是其他人阅读你的代码的关键,而不是花费数年时间试图破译它。@Alundrathedreamwalker还有另一本很棒的书,书名是《成长的面向对象软件:测试指导》,书中也充满了良好的实践。我希望我回答了您的问题,因为许多开发人员都在使用这种方法。
public bool ArePlayerValidForThisNumber(int InputNumber)
{
If (condition)
return true;
else return false;
//Or simply return condition;
}
public List<int> ListOfPlayersIDs(int InputNumber)
{
return new List<int>(new int[] {1, 2, 3}); // return a list with items
}
public List<int> ListOfPlayersIDs(int InputNumber)
{
if (methodDescribingTheBusinessCondition()) {
return methodDescribingPositiveOutcome();
} else {
return methodNameDescribingNegativeOutcome();
}
}