Чем больше я углубляюсь в функциональное программирование, тем больше читаю рекомендации в пользу статических методов в пользу нестатических. Вы можете прочитать об этой рекомендации в этой книге, например:
http://www.amazon.de/Functional-Programming-Techniques-Projects-Programmer/dp/0470744588
Конечно, это имеет смысл, если вы думаете о функциональной чистоте. Там стоит статическая функция и говорит: «Мне не нужно никакого состояния!»
Однако, как это влияет на тестируемость? Я имею в виду, разве система с большим количеством статических методов становится трудной для тестирования (так как статические методы трудно подделать)? Или макеты играют второстепенную роль в функциональном программировании, и если да, то почему?
EDIT
Так как есть сомнения, действительно ли книга дает такую рекомендацию. Я процитирую немного больше. Надеюсь, это нормально для Оливера Штурма.
Использовать статические методы
Статические методы - одна из основных идей, которую стоит рассмотреть в качестве общего руководства. Он поддерживается многими объектно-ориентированными программистами, и с функциональной точки зрения функции можно сделать статичными большую часть времени. Любая чистая функция может быть сделана статичной.
(...)
Некоторые могут утверждать, что идея всегда передавать все параметры означает, что вы не используете идеи объектной ориентации так часто, как могли бы. На самом деле это может быть правдой, но, возможно, это происходит потому, что концепции объектной ориентации не уделяют столько внимания вопросам параллельного выполнения, как следовало бы.
(...)
Наконец, рекомендация: если вы написали метод, который не требует доступа ни к какому полю в классе, в котором он живет, сделайте его статическим!
Кстати, до сих пор были хорошие ответы. Спасибо за это!