2017-02-05 16 views
-1

У меня есть вспомогательный класс, который принимает некоторый объект, обрабатывает его и возвращает какой-либо экземпляр другого класса или даже списка объектов. Каким будет лучший способ: сделать этот вспомогательный метод статическим или нестационарным? Дело в том, что мое приложение может создавать множество объектов Car, и я думал, может ли это иметь отрицательный эффект, когда каждый из них использует статический помощник?Использование статических методов в классе-помощнике против нестатического

+0

У вас есть пример кода, который поможет ответить на наиболее подходящий вам вопрос. –

+1

@ J.Doe Yup. У вашего автомобиля может быть плоская шина. Шутки в отдельности, можете ли вы показать нам какой-то код, пожалуйста. – CKing

+0

Вам нужно высмеять некоторые функции при тестировании вашего класса (оригинал, а не вспомогательный класс)? Если это так, вы не должны использовать статические методы. –

ответ

1

В большинстве вспомогательных или служебных классов используются статические методы. Вы должны использовать нестатические методы, если хотите создать несколько экземпляров вашего вспомогательного класса, но поскольку вам просто нужен простой вывод -> function -> output, я бы сделал методы статическими.

+0

Это неправильно. Вы должны использовать статические классы/методы только в том случае, если есть веская причина для их статичности, а не наоборот. –

+1

@shay__ как метод помощника, который не связан ни с одним из состояний, ни с необходимостью переопределения? –

+0

@shay__ Классы полезности обычно статичны. создание экземпляра объекта для одного несвязанного метода является избыточным. его предложение не ошибается, вы неверно истолковали его. – Stavm

1

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

Вы должны попытаться использовать инъекции зависимостей подход:

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.

+1

Я бы изменил тип на 'IHelper' в вашем примере, чтобы подчеркнуть, что между' X' и его помощником нет связи –

+0

@shay__ Я думал об этом ... Я могу изменить его, без проблем .. –

0

Использовать статический класс со статическими методами, без экземпляра и не только статических методов в классе.

public static class HelperClass 
{ 
    public static void HelperMethod() 
    { 
     // do something 
    } 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^