我是创建图表类的初学者。必要性使我有必要做一个好的模型。
解决方案是进行数学测验。系统必须生成每个问题并检查答案。
我将展示我的普通课程:
这里有casses
interface IProblemFactory<T> where T : Problem<T>
{
T Create();
}
public class ArithmeticProblemFactory : IProblemFactory<Arithmetic>
{
// This generates Arithmetic problems
public Arithmetic Create() { }
}
// And the others types of problems
然后我得到了包含问题的类:
public abstract class Problem<T> : IEquatable<T>
{
public abstract int ResultCount { get; }
public abstract bool CheckTheAnswer();
protected abstract bool CheckTheAnswer(params object[] results);
public abstract bool Equals(T other);
}
public class Arithmetic : Problem<Arithmetic>
{
public decimal Number1 { get; set; }
public Operations Operation { get; set; }
public decimal Number2 { get; set; }
public override int ResultCount
{
get { return 1; }
}
protected override bool CheckTheAnswer(params object[] results)
{
if (results.Length != ResultCount)
throw new ArgumentException("Only expected " + ResultCount + " arguments.");
decimal result = (decimal)results[0];
switch (Operation)
{
case Operations.Addition:
return Number1 + Number2 == result;
case Operations.Subtraction:
return Number1 - Number2 == result;
case Operations.Multiplication:
return Number1 * Number2 == result;
case Operations.Division:
return Number1 / Number2 == result;
default:
throw new Exception("Operator unexpected");
}
}
public override bool Equals(Arithmetic other)
{
if (other == null)
return false;
return this.Number1 == other.Number1 && Number2 == other.Number2;
}
}
问题我认为我没有做好设计。因为所有问题都包含CheckTheAnswer(params obj ..)。但所有问题都有不同的结果。
例如在Arithmetic中只需要一个十进制值,比较2我需要存储两个值,其他我需要存储结果,如Fraction类。
也许我需要将它们分开..算术可能只包含两个属性:问题和答案,但我不确定。
答案 0 :(得分:1)
如果所有可能的问题都有不同的结果集,那么您希望将哪些功能重构为接口?他们没有任何常见功能。这是你的问题。你可能能够做一些简单的事情,比如
interface Problem {
void OutputProblem(OutputStream stream);
void AcceptAnswer(InputStream stream);
bool IsAnswerCorrect();
}
但是,您目前的架构根本不适合。