TGViewer
.NET Разработчик .NET Разработчик @netdeveloperdiary · 6.77K subscribers
Post #1026 1.31K
День восемьсот тридцать восьмой. #ЗаметкиНаПолях
Статические Методы - Зло? Окончание
Начало

Когда вы изучаете функциональное программирование, вы начинаете понимать, что статические методы вредны только в том случае, если они работают с общим состоянием. Например, когда они позволяют вам читать или изменять состояние глобальной переменной.

Статические методы, которые не работают с общим состоянием, по-прежнему обладают хорошими характеристиками, которые мы обсуждали ранее (удобство, немного лучшая производительность), но не проявляют соответствующих недостатков (сильная связанность, запутанный график зависимостей).

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

Вы же не беспокоитесь об "абстрагировании" вызовов вроде Math.Min(a, b), верно? Вам также не следует беспокоиться об отделении вашего кода от ваших собственных статических методов, которые не сохраняют состояния.

Рассмотрим следующий класс:
public class CustomerService {
public void Process(string cust, string addr)
{
Address a = CreateAddress(addr);
Customer c = CreateCustomer(cust, a);
SaveCustomer(c);
}
…
}
Обычно мы сделали бы методы CreateAddress, CreateCustomer и SaveCustomer приватными экземплярными методами. Но, их можно сделать статическими:
private static Address CreateAddress(string addr)
=> new Address(addr);

private static Customer
CreateCustomer(string name, Address addr)
=> new Customer(name, addr);

private static void SaveCustomer(Customer c)
{
var repository = new Repository();
repository.Save(c);
}

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

4. Вывод
За свою карьеру программиста я испытывал разное отношение к использованию статических методов. Ещё недавно я пытался всегда явно вводить все нужные зависимости. В настоящее время я делаю это только для зависимостей, которые сохраняют состояние. Если метод не сохраняет состояния, его можно сделать статическим и вызвать напрямую.

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

Источник: https://enterprisecraftsmanship.com/posts/static-methods-evil/
More from @netdeveloperdiary
  1. Oct 17, 2026День 2817. #ЧтоНовенького #VS Прекращаем Сборку После Первой Ошибки Мэдс Кристенсен продол…
  2. Oct 16, 2026День 2816. #Карьера #AI Станет ли ИИ-Кодинг Концом Программирования для Людей? Автор ориги…
  3. Oct 15, 2026Post #3374
  4. Oct 14, 2026Post #3373
  5. Oct 13, 2026День 2813. #ЗаметкиНаПолях #Async Ещё Раз Про Async/Await в C#. Часть 1 Почему существует…
  6. Oct 12, 2026День 2812. #Карьера #AI Как Разработчикам Оставаться Полезными, Когда Код Пишет ИИ? По мер…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →