Мое правило заключается в том, чтобы благоприятствовать методы экземпляра более статических методов, особенно если метод принято считать поведение присущая к объекту.
Методы экземпляров проще вызвать, чем статические методы. Легче читать и писать customer.GetOrders()
, чем Customer.GetOrders(customer)
. Если для этого метода нужен доступ к закрытым членам экземпляра, доступ к этим элементам не требует ссылки на объект (и типизация this
обычно не требуется).
Статические методы полезны в ограниченном числе случаев. Например, ранее существовавшая ссылка на экземпляр не имеет смысла при реализации шаблона фабрики. Вы можете создать библиотеку, которая выполняет операции над несколькими объектами того же типа, где это не обязательно считается более предпочтительным, чем другое, например Math.Max(first, second)
.
Статические методы необходимы, если вам нужно расширить объект, но не контролируйте исходный код объекта и не можете расширить объект через наследование. В таких случаях вы можете использовать методы расширений.
Также учтите, что статические методы могут затруднить тестирование. Возьмем следующий пример:
public bool IsOrderDateValid()
{
return (DateTime.Now <= _orderDate);
}
DateTime.Now
статический. В автоматическом тесте вы можете установить _orderDate
на постоянное значение, но DateTime.Now
будет зависеть от системных часов вашей тестовой среды. Это может привести к непоследовательным результатам.
При проектировании вашей системы со статическими методами подумайте о создании синглонов вместо этого, чтобы помочь в тестировании.
Независимо от того, что работает для вашего случая ... Обычно 6 параметров - это слишком много, но какой рефакторинг (если есть) использовать для изменения, это в основном личный выбор. –
Почему бы вам не создать POCO, который будет хранить все эти вещи, а затем метод, который принимает экземпляр этого класса? – MarcinJuraszek
Имеете ли вы метод, который принимает 6 параметров или метод, который принимает один параметр, который является объектом с шестью свойствами, он не изменяет читаемость IMO. Лучшей практикой будет реорганизация вашего кода, чтобы у вас не было такого большого метода. – Nathan