статика или объекты, что лучше в этом случае? - PullRequest
2 голосов
/ 28 сентября 2011

У меня есть метод WCF, который выглядит примерно так:

public GetRecordsResponse GetRecords(GetRecordsRequest request)
        {
            GetRecordsResponse response = new GetRecordsResponse();

                Util.GetRecords.VerifyMandatoryParameters(request);
                //make sure mandatory parameters have correct values.
                Util.GetRecords.SetDefaultValues(request);

                Util.GetRecords.SetDefaultResponseValues(request, response);

                DataReader.GetRecords.GetAllRecords(request, response);

            return response;
        }

Это неправильно, что у меня есть весь DAL и многие методы Helper в качестве статических классов и методов?Если так, то почему?

Ответы [ 3 ]

1 голос
/ 28 сентября 2011

В результате использования статического метода вы можете получить доступ к переменным экземпляра, таким как свойства и поля, это означает, что вам нужно передать запрос каждому методу.

Если вы использовали экземпляры GetRecords, вы могли бы сделать что-нибудь подобное

   GetRecords gr = new gr();
   gr.Request = request;
   gr.VerifyMandatoryParameters();
   gr.SetDefaultValues();
   gr.SetDefaultResponseValues(response);
   gr.GetAllRecords();

Кроме того, если вы используете свободно распространяемые интерфейсы, вы могли бы написать это так:

   GetRecords gr = new gr();
   gr.SetRequest(request)
     .VerifyMandatoryParameters()
     .SetDefaultValues()
     .SetDefaultResponseValues(response)
     .GetAllRecords();

Но нет ничего «неправильного» в том, что вы сделали

1 голос
/ 29 сентября 2011

Короче говоря, Да.

Я полагаю, что вы выполняете несколько тестов или совсем не выполняете тестирование кода.Если вы планируете добавить любой, в любой момент;DAL со статическим доступом не принесет вам конца печали (сейчас я рассматриваю этот точный сценарий).

Вместо этого вы должны передавать, скажем, интерфейс DataAccessService , который может бытьвысмеян для тестирования и реализован, указывая на ваше реальное хранилище данных в производстве.

Итак, я ожидаю, что ваш код будет выглядеть примерно так:

public GetRecordsResponse GetRecords(GetRecordsRequest request, DataAccessService dataAccess)
        {
            var response = new GetRecordsResponse();

            Util.GetRecords.VerifyMandatoryParameters(request);
            Util.GetRecords.SetDefaultValues(request);    
            Util.GetRecords.SetDefaultResponseValues(request, response);

            dataAccess.GetAllRecords(request, response);

            return response;
        }
1 голос
/ 28 сентября 2011

Это субъективный вопрос, но я думаю, что статические методы вообще вредны (за исключением очень немногих ситуаций).

Вот ссылка на доклад, в котором обсуждается, почему это проблема: http://misko.hevery.com/2008/11/11/clean-code-talks-dependency-injection/

Хотя говорящий говорит о Java, но это довольно схожий язык, и статические методы используются почти одинаково в обоих языках.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...