Я очень предпочитаю, чтобы все частные методы были статическими, если они действительно не могут быть такими. Я бы предпочел следующее:
public class MyClass
{
private readonly MyDependency _dependency;
public MyClass(MyDependency dependency)
{
_dependency = dependency;
}
public int CalculateHardStuff()
{
var intermediate = StepOne(_dependency);
return StepTwo(intermediate);
}
private static int StepOne(MyDependency dependency)
{
return dependency.GetFirst3Primes().Sum();
}
private static int StepTwo(int intermediate)
{
return (intermediate + 5)/4;
}
}
public class MyDependency
{
public IEnumerable<int> GetFirst3Primes()
{
yield return 2;
yield return 3;
yield return 5;
}
}
для каждого метода, обращающегося к полю экземпляра. Почему это? Поскольку, поскольку этот процесс вычисления становится более сложным и класс заканчивается 15-ю закрытыми вспомогательными методами, я ДЕЙСТВИТЕЛЬНО хочу иметь возможность вывести их в новый класс, который инкапсулирует подмножество шагов семантически значимым образом.
Когда MyClass
получает больше зависимостей, потому что нам нужно вести логи, а также нужно уведомить веб-сервис (пожалуйста, извините за примеры клише), тогда действительно полезно легко увидеть, какие методы имеют какие зависимости.
Инструменты типа R # позволяют вам извлечь класс из набора приватных статических методов несколькими нажатиями клавиш. Попробуйте сделать это, когда все частные вспомогательные методы тесно связаны с полем экземпляра, и вы увидите, что это может быть довольно головной болью.