我有一个方法用于发送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/)。 –