これは、ランダムクラスのラッパー拡張機能を使用しているコードです。
public static class RandomHelper
{
private static int currentSeed;
private static Random rd = new Random();
public static double Next()
{
return rd.NextDouble();
}
public static double Next(double min, double max)
{
return (rd.NextDouble() * (max - min)) + min;
}
public static double NextOnStep(double min, double max, double step)
{
int range = (int)Math.Floor((max - min) / step);
int stepCount = rd.Next(0, range);
return min + (step * stepCount);
}
public static double NextOnDecimalCount(double min, double max, int decimals)
{
double step = Math.Pow(10, decimals);
return Math.Truncate(((rd.NextDouble() * (max - min)) + min) * step) / step;
}
そして、この状況を想像してみてください。私は3つの範囲の数を含むクラスを持っています
public class ArithmeticProblemGenerator()
{
Range Number1Range {get;set;}
Range Number2Range {get;set;}
...
Range Number5Range {get;set;}
}
public class Range
{
public Range()
{
}
public Range(double min, double max)
{
this.Min = min;
this.Max = max;
}
public double Min { get; set; }
public double Max { get; set; }
}
そして、問題を生成したいときは、RandomHelperにextesionとして別のメソッドを追加します。
#region RandomHelper extensions
public static double Next(Range range)
{
return Next(range.Min, range.Max);
}
public static double NextOnStep(Range range, double step)
{
return NextOnStep(range.Min, range.Max, step);
}
public static double NextOnDecimalCount(Range range, int decimals)
{
return NextOnDecimalCount(range.Min, range.Max, decimals);
}
#endregion
しかし、次にArithmeticProblemGeneratorの新機能を追加します。小数点以下の桁数が異なる数値が必要な場合や、ステップの後に数値が続く場合があります。
それで、私は、次の機能を追加するために、さらに2つのクラスを作成するのが良いと思いました。
public class RangeOnStep : Range
{
public RangeOnStep()
{
}
public RangeOnStep(double min, double max, double step)
: base(min, max)
{
this.Step = step;
}
public double Step { get; set; }
}
public class RangeOnDecimalPlace : Range
{
public RangeOnDecimalPlace()
{
}
public RangeOnDecimalPlace(double min, double max, double decimalPlaces)
: base(min, max)
{
this.DecimalPlaces = decimalPlaces;
}
public double DecimalPlaces { get; set; }
}
そして、これらの新しいクラスで別のメソッド拡張を追加します。私は良い仕事をしていると思いますか、それともデザインがめちゃくちゃだと思いますか?
提案や意見を聞きたいです。前もって感謝します。