Разумно ли использовать классы stati c для управления сетевыми запросами? - PullRequest
0 голосов
/ 09 июля 2020

У меня есть stati c помощник HTTP-запроса в ASP. NET

Это потокобезопасный?

Вызовет ли это утечку памяти?

Будет ли одноэлементная модель лучшим выбором? PS: В этом случае мне не нужно расширять классы или реализовывать интерфейсы.

Будет ли этот код плохо влиять на программу?

Вот код. Спасибо за вашу помощь. .

    public static class NetUtils
    {
        private static string API_VERSION = "1.0";

        private static readonly string API_GET_TOKEN = "/gettoken.json";

        public static string Post(string api, Dictionary<string, string> mParams)
        {

            string resultStr = string.Empty;
            try
            {
                string domain = ConfigurationManager.AppSettings["ApiDomain"];
                string url = string.Format("{0}{1}", domain, api);

                string dictDataString = DictUrlEncode(mParams);
                HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
                request.Method = "POST";
                request.ContentType = "application/x-www-form-urlencoded";
                byte[] byteData = Encoding.UTF8.GetBytes(dictDataString);
                using (Stream postStream = request.GetRequestStream())
                {
                    postStream.Write(byteData, 0, byteData.Length);
                }
                HttpWebResponse respponse = (HttpWebResponse)request.GetResponse();
                Stream responseStream = respponse.GetResponseStream();
                StreamReader read = new StreamReader(responseStream, Encoding.UTF8);
                resultStr = read.ReadToEnd();
                read.Close();
                respponse.Close();
                request.Abort();
            }
            catch (Exception ex)
            {
                LogUtils.Log(string.Format("{0}: {1}", api, ex.ToString()));
            }
            return resultStr;
        }

1 Ответ

1 голос
/ 09 июля 2020

Предпочтительнее использовать объекты вместо классов c из-за тестовых целей.

Предположим, у вас есть этот класс

public class SomeLogic {

    public object SomeMethod() {
      ...
      NetUtils.Post("aUrl",aObject);
      ...
    }
}

Вы никогда не сможете создать юнит test: этот код всегда будет выполнять http-вызов. Ваш тест может завершиться неудачно из-за сетевых ошибок или ошибок сервера, и это не то, чего вы хотите достичь с помощью модульного теста.

В этом случае я бы просто ввел зависимость (как синглтон или нет) через interface

public interface INetworkUtils {
    string Post(string api, Dictionary<string, string> mParams)
} 

, так что если вам нужно создать модульный тест, вы можете.

Если вы не собираетесь создавать тесты, тогда решение с классом stati c подходит.

...