Мне очень нравятся методы расширения, но я чувствую, что когда они используются вне LINQ, они улучшают читабельность за счет удобства сопровождения.
Взять 3.Days().FromNow()
в качестве примера. Это удивительно выразительно, и любой может прочитать этот код и сказать вам, что именно он делает. Это действительно красивая вещь. Как программисты, мы с радостью пишем код с самоописанием и выразительностью, так что он почти не требует комментариев и доставляет удовольствие читать. Этот код имеет первостепенное значение в этом отношении.
Однако, как программисты, мы также несем ответственность за потомство, и те, кто придут за нами, будут тратить большую часть своего времени, пытаясь понять, как работает этот код. Мы должны быть осторожны, чтобы не быть настолько выразительными, что для отладки нашего кода нужно прыгать среди множества методов расширения.
Методы расширения скрывают «как», чтобы лучше выразить «что». Я думаю, это делает их обоюдоострым мечом, который лучше всего использовать (как и все вещи) в умеренных количествах.