類測試是abstract
。它包含一個基本的測試名和一個分數。該分數(雙倍)可通過名爲TestScore的屬性訪問。重構重複代碼 - 唯一區別是<符號
三類繼承自Test。他們是不同的,每種測試都有不同的評分方式。
目標:根據評分可以在的值之間的範圍值,評分與6評分之一。
class ScoreRangeAscendingTest : Test
{
public ScoreRangeAscendingTest(double score, Enums.TestType typeName) : base(score, typeName) { }
public double[] ranges;
public Enums.Rating calculateScore(double[] range)
{
if (scoreInVeryWeakRange())
return Enums.Rating.VeryWeak;
else if (scoreInWeakRange())
return Enums.Rating.Weak;
else if (scoreInAveragelyWeakRange())
return Enums.Rating.AveragelyWeak;
else if (scoreInAveragelyGoodRange())
return Enums.Rating.AveragelyGood;
else if (scoreInGoodRange())
return Enums.Rating.Good;
else
return Enums.Rating.VeryGood;
}
private bool scoreInVeryWeakRange()
{
return this.TestScore < ranges[(int)Enums.Border.P10];
}
private bool scoreInWeakRange()
{
return TestScore >= ranges[(int)Enums.Border.P10] && TestScore < ranges[(int)Enums.Border.P25];
}
private bool scoreInAveragelyWeakRange()
{
return TestScore >= ranges[(int)Enums.Border.P25] && TestScore < ranges[(int)Enums.Border.P50];
}
private bool scoreInAveragelyGoodRange()
{
return TestScore >= ranges[(int)Enums.Border.P50] && TestScore < ranges[(int)Enums.Border.P75];
}
private bool scoreInGoodRange()
{
return TestScore >= ranges[(int)Enums.Border.P75] && TestScore < ranges[(int)Enums.Border.P90];
}
private bool scoreInVeryGoodRange()
{
return TestScore > ranges[(int)Enums.Border.P90];
}
}
}
問題:我的測試,其相應的範圍上去測試其相應的範圍下去。因此,我需要爲第二種測試編寫完全相同的代碼,但這次所有'<'符號都必須是'>'符號,反之亦然。
問題:如何避免重複此代碼?有沒有可能將其添加到基類?
包含重複的測試代碼會很有幫助;這裏測試調用的代碼並沒有告訴我們很多。 – GendoIkari
重複的是私有bool函數的列表 - 每種情況下唯一的區別是< becoming >,反之亦然。 已經給出瞭解決方案:-) –
我不明白你的問題。您發佈的代碼與< becoming >不同。 – GendoIkari