Я хочу реорганизовать следующий код, чтобы избежать if... else, так что мне не нужно менять метод каждый раз, когда приходит новый тип опроса (принцип Open/closed). Ниже приведен фрагмент кода, который я рассматриваю для реорганизации:
if (surveyType == SurveySubType.Anonymous)
{
DoSomething(param1, param2, param3);
}
else if (surveyType == SurveySubType.Invitational)
{
DoSomething(param1);
}
else if (surveyType == SurveySubType.ReturnLater)
{
DoSomething(param1);
}
Чтобы решить эту проблему, я добавил следующие классы:
public abstract class BaseSurvey
{
public string BuildSurveyTitle()
{
...doing something here
}
public abstract void DoSomething(int? param1,int? param2,int? param3);
}
public class InvitationalSurvey: BaseSurvey
{
public override void DoSomething(int? param1,int? param2,int? param3)
{
//I don't need param2 and param3 here
}
}
public class ReturnLaterSurvey: BaseSurvey
{
public override void DoSomething(int? param1,int? param2,int? param3)
{
//I don't need param2 and param3 here
}
}
public class AnonymousSurvey: BaseSurvey
{
public override void DoSomething(int? param1,int? param2,int? param3)
{
//I need param2 and param3 here
//do something
}
}
И вот мой код заканчивается:
var survey = SurveyFactory.Create();
survey.DoSomething(param1,param2,param3);
Мой вопрос в том, что было бы неплохо избежать прохождения param2 и param3 в классы InvitationalSurvey и ReturnLaterSurvey?