我有一個方法用於發送GET請求是這樣的:我應該違反SOLID中的S還是應該違反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方法相同,除了另外兩行代碼在條件語句(「如果Post」)之外,我是違反DRY,因爲大部分代碼是相同的。
還有第三種方法嗎?中間道路?或者我必須在這兩個違規之間做出選擇?我被困在乾燥和固體之間。
有一種方法可以檢測到POST或不* *,*會調用其他兩種方法之一。 –
您始終可以重構它們都使用的代碼。 –
你也可以將你當前的代碼分成兩種方法;調用你的第一個代碼片段(但沒有if)POST和另一個GET只有if條件,然後調用POST。如果你不能這樣做,通常你會嘗試遵循DRY,這是編程的本質。順便說一下,有一個Stack Exchange網站致力於[代碼評論](http://codereview.stackexchange.com/)。 –