Проблема, которую вы пытаетесь решить, связана с созданием новых объектов. Здесь - некоторые распространенные шаблоны кодирования, используемые для того же самого.
Я бы сказал, что это хороший пример использования фабричного шаблона. Мы делегируем ответственность за создание объектов на фабрику .
Во-первых, мы можем идентифицировать их как классы, расширяющие абстрактный класс
public abstract class MehodResponseBase {
public abstract void DoSpecialThing();
public abstract string responseText;
}
public class Method100Response201 : MehodResponseBase
{
public override responseText = "Method100Response201";
public string R1_01 { get; set; }
public override void DoSpecialThing()
{ Console.WriteLine ("Something Blue..}"); }
}
public class Method100Response404 : MehodResponseBase
{
public override responseText = "Method100Response404";
public string R2_01 { get; set; }
public override void DoSpecialThing()
{ Console.WriteLine ("Something Old..}"); }
}
public class Method110Response200 : MehodResponseBase
{
public override responseText = "Method110Response200";
public string R3_01 { get; set; }
public override void DoSpecialThing()
{ Console.WriteLine ("Something New..}"); }
}
Затем мы может извлечь их создание на фабрику
pubic class MethodResponseFactory()
{
public static MehodResponseBase Make(int method, int response)
{
if (method == 100)
{
if(response == 201)
{
return new Method100Response201();
}
if(response == 404)
{
return new Method100Response404();
}
}
if (method == 110)
{
if (response == 200)
{
return new Method110Response200();
}
}
throw new MethodResponseCreationException($"Cannot create for mothod: {method} and response: {response}")
}
}
Таким образом, ваша модель ответа реорганизована в
public static string ResponseModel(int method, int response)
{
try
{
return MethodResponseFactory.Make(method, response).returnClass;
}
catch (MethodResponseCreationException ex)
{
return string.Empty;
}
}
Итак, как вы можете видеть, все делегирование для создания объекта теперь находится в завод. И класс resonseModel
просто вызывает фабрику для создания класса, основанного на method
и response
.