У меня есть вспомогательный класс, который принимает некоторый объект, обрабатывает его и возвращает какой-либо экземпляр другого класса или даже списка объектов. Каким будет лучший способ: сделать этот вспомогательный метод статическим или нестационарным? Дело в том, что мое приложение может создавать множество объектов Car, и я думал, может ли это иметь отрицательный эффект, когда каждый из них использует статический помощник?Использование статических методов в классе-помощнике против нестатического
ответ
В большинстве вспомогательных или служебных классов используются статические методы. Вы должны использовать нестатические методы, если хотите создать несколько экземпляров вашего вспомогательного класса, но поскольку вам просто нужен простой вывод -> function -> output, я бы сделал методы статическими.
Это неправильно. Вы должны использовать статические классы/методы только в том случае, если есть веская причина для их статичности, а не наоборот. –
@shay__ как метод помощника, который не связан ни с одним из состояний, ни с необходимостью переопределения? –
@shay__ Классы полезности обычно статичны. создание экземпляра объекта для одного несвязанного метода является избыточным. его предложение не ошибается, вы неверно истолковали его. – Stavm
Возможно, это то, что можно решить, не решая жизненного цикла вспомогательного объекта, где вы его требуете.
Вы должны попытаться использовать инъекции зависимостей подход:
public class X
{
public X(IHelper helper)
{
Helper = helper;
}
private IHelper Helper { get; }
public void DoStuff()
{
var result = Helper.DoOtherStuff(input);
}
}
То есть, X
не знаю, является ли Helper всегда тот же экземпляр или, если это временный объект. Это делает код более чистым и более удобным для тестирования, потому что вы можете высмеивать помощника с помощью поддельной реализации IHelper
, чтобы убедиться, что вы просто тестируете X
.
Я бы изменил тип на 'IHelper' в вашем примере, чтобы подчеркнуть, что между' X' и его помощником нет связи –
@shay__ Я думал об этом ... Я могу изменить его, без проблем .. –
Использовать статический класс со статическими методами, без экземпляра и не только статических методов в классе.
public static class HelperClass
{
public static void HelperMethod()
{
// do something
}
}
У вас есть пример кода, который поможет ответить на наиболее подходящий вам вопрос. –
@ J.Doe Yup. У вашего автомобиля может быть плоская шина. Шутки в отдельности, можете ли вы показать нам какой-то код, пожалуйста. – CKing
Вам нужно высмеять некоторые функции при тестировании вашего класса (оригинал, а не вспомогательный класс)? Если это так, вы не должны использовать статические методы. –