通用课堂设计,用于提出任何类型的问题并给出答案



我计划为questionary设计一个通用类库,用户可以在其中提出任何类型的问题(包括该问题的答案(
下面是我实施的设计
如果需要的话,有人能看一看并提出修改建议吗?

public interface IQuestion
{
void AskQuestion();
}
public abstract class Question:IQuestion
{
public string QuestionString { get; set; }
public Question()
{
QuestionString = string.Empty;
}
public Question(string QuestionString)
{
this.QuestionString = QuestionString;
}
public abstract void AskQuestion();
}
public class ChoiceQuestion: Question
{
public List<string> ChoiceList { get; set; }
public ChoiceQuestion(string QuestionString, List<string> Choices) 
:base(QuestionString)
{
ChoiceList = Choices;
}
public override void AskQuestion()
{
Console.WriteLine(QuestionString);
foreach(string opt in ChoiceList)
{
Console.Write(opt + "t");
}
Console.WriteLine("n=======================================================");
}
}
public class MultipleChoiceQuestion : ChoiceQuestion
{
public List<string> CorrectChoices { get; set; }
public MultipleChoiceQuestion(string QuestionString, List<string> Choices, List<string> CorrectList) 
: base(QuestionString, Choices) 
{
CorrectChoices = CorrectList;
}
}
public class OptionalChoiceQuestion : ChoiceQuestion
{
public string Answer;
public OptionalChoiceQuestion(string QuestionString, List<string> Choices, string CorrectChoice)
: base(QuestionString, Choices)
{
Answer = CorrectChoice;
}
}

class Program
{
static void Main(string[] args)
{
Question q = new OptionalChoiceQuestion("How many rings are on the Olympic flag?", new List<string> { "None","4","5","7"}, "5");
q.AskQuestion(); // Output to console.
q = new MultipleChoiceQuestion("Which of these are wild animals?", new List<string> { "Tiger", "Dog", "Cat", "Elephant", "Horse" }, new List<string> { "Tiger" , "Elephant" });
q.AskQuestion(); // Output to console.
}
}

请提供相同的通用设计。

这本身并没有什么问题,但您应该考虑是否真的需要一个接口的抽象类,或者是否可以只使用一个抽象类或一个接口。

如果您需要在其他位置(例如客户端(使用IQuestion,或者将传递IQuesti翁的实现,而不是Question,那么这样做是有意义的。

如果您允许在未来扩展灵活性以及接口级别上的不同变体。

如果你只在一个抽象类中使用它,并且只创建这个问题基类的子类的具体实例,那么我建议你并不真的需要它,而且你已经过度设计了。

最新更新