我应该违反SOLID中的S还是违反DRY原则?

  发布于 2023-01-29 10:36

我有一个发送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(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;
}

...我通过在webRequest和webResponse的赋值之间加入来修改它来处理POST请求:

if (uri.ToUpper().Contains("POST"))
{
    webRequest.Method = "POST";
    webRequest.ContentLength = 0;
}

...并将其重命名为GetOrPostRESTData()

但这违反了单一责任原则.

然而,如果我将它变成两个方法,POST方法与GET方法相同,除了条件中另外两行代码("if Post")之外,我违反了DRY,大部分代码都是一样的.

还有第三种方式吗?中途?或者我必须在这两种违规行为中做出选择 我被困在DRY和SOLID之间.

1 个回答
  • 如何从更高级别的抽象中查看它?不要担心它是a GET还是POST在方法名称中,只需称之为ProcessRequest.在这种情况下,您可能会争辩说SRP仍然被遵循 - 您的方法正在做的一件事就是处理给定URI中指示的请求 - 并且您不会复制任何代码.

    2023-01-29 10:37 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有