Я попытаюсь ответить на ваш конкретный вопрос, используя предоставленный вами образец кода.
Если SomeMethod
полезен только в классе, в котором он объявлен, я бы избегал статического преобразования и оставил его как метод экземпляра.
Если SomeMethod
полезен вне класса, в котором он находится, выньте его из класса. Это может быть как статический метод в статическом служебном классе. Чтобы сделать его тестируемым, убедитесь, что все его зависимости переданы ему в качестве аргументов. Если он имеет множество зависимостей, вы можете проверить дизайн и точно выяснить, что он должен делать - это может быть лучше в качестве метода экземпляра в одном из классов, которые вы ему передаете.
Некоторые говорят, что статика - это зло. Обычно это происходит из-за ловушек, которые предоставляет изменяемое статическое состояние, когда переменные зависают с момента вызова статического конструктора для разрушения домена приложения, изменяясь между ними. Код, зависящий от этого состояния, может вести себя непредсказуемо, и тестирование может стать ужасным. Однако нет ничего плохого в статическом методе, который не ссылается на изменяемое статическое состояние.
В качестве (очень простого) примера, где статика является злом, но может быть преобразована в незлую версию, представьте функцию, которая вычисляет чей-то возраст:
static TimeSpan CalcAge(DateTime dob) { return DateTime.Now - dob; }
Это можно проверить? Ответ - нет. Он основан на чрезвычайно нестабильном статическом состоянии DateTime.Now
. Вам не гарантируется каждый раз одинаковый результат для одного и того же входа. Чтобы сделать его более удобным для тестирования:
static TimeSpan CalcAge(DateTime dob, DateTime now) { return now - dob; }
Теперь все значения, на которые опирается функция, переданы, и это полностью проверено. Один и тот же ввод даст вам тот же результат.
person
Alex Humphrey
schedule
13.09.2010