я имел метод для отправки запросов GET, как это:Должен ли я нарушать S в SOLID или я должен нарушать принцип DRY?
private JArray GetRESTData(string uri)
{
try
{
var webRequest = (HttpWebRequest)WebRequest.Create(uri);
var webResponse = (HttpWebResponse)webRequest.GetResponse();
var reader = new StreamReader(webResponse.GetResponseStream());
string s = reader.ReadToEnd();
return JsonConvert.DeserializeObject<JArray>(s);
}
catch // This method crashes if only one json "record" is found - try this:
{
try
{
MessageBox.Show(GetScalarVal(uri));
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
return null;
}
... Я изменил его, чтобы иметь дело с запросами POST на заклинивание это между присвоений WebRequest и WebResponse:
if (uri.ToUpper().Contains("POST"))
{
webRequest.Method = "POST";
webRequest.ContentLength = 0;
}
. .. и переименовал его GetOrPostRESTData()
Но это нарушает принцип единой ответственности.
Однако, если я делаю это двумя способами, метод POST аналогичен методу GET, за исключением дополнительных двух строк кода, которые в противном случае являются условными («если сообщение»), я нарушая DRY, поскольку большая часть кода такая же.
Есть ли третий способ? Средний путь? Или я должен выбирать между этими двумя нарушениями? Я застрял между сухим и твердым местом.
Имейте метод, который обнаруживает POST или нет, и *, который * будет вызывать один из двух других методов. –
Вы всегда можете реорганизовать код, который они используют. –
Вы также можете разделить текущий код на два метода; Вызовите свой первый фрагмент (но без if) POST, а другой GET - только с условием if, после которого следует вызов POST. Если вы не можете этого сделать, обычно вы пытаетесь следовать DRY, это суть программирования. И, кстати, есть веб-сайт Stack Exchange, посвященный [обзорам кода] (http://codereview.stackexchange.com/). –