我有一种发送 GET 请求的方法,如下所示:
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 方法相同,除了在条件(“if Post”)中的另外两行代码之外,我违反了 DRY,因为大部分代码都是一样的。
有没有第三种方式?中道?或者我必须在这两种违规行为之间做出选择?我被困在干燥和坚固的地方之间。
最佳答案
从更高的抽象层次来看它怎么样?不用担心它是方法名称中的 GET
还是 POST
,只需将其称为 ProcessRequest
。在这种情况下,您可能会争辩说仍然遵循 SRP - 您的方法所做的唯一一件事就是处理给定 URI 中指示的请求 - 您没有复制任何代码。
关于c# - 我应该违反 SOLID 中的 S 还是违反 DRY 原则?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21585889/