вызов метода расширения другого в том же классе расширения - хороший дизайн? - PullRequest
9 голосов
/ 16 сентября 2010

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

public class ClassExtensions
{
   public static bool IsNotNull<T>(this T source)
      where T : class
   {
      return !source.IsNull();
   }

   public static bool IsNull<T>(this T source)
      where T : class
   {
      return source == null;
   }
}

EDIT Спасибо за ответы. И извините за плохой образец.

Ответы [ 4 ]

8 голосов
/ 16 сентября 2010

Всё хорошо. Ваш пример, конечно, немного тривиален, но рассмотрим другие ситуации, когда метод может обеспечить перегрузки (используя string.Substring в качестве примера ... метод pretend не существует).

public static class Foo
{
    public static string Substring(this string input, int startingIndex)
    {
         return Foo.Substring(input, startingIndex, input.Length - startingIndex);
         // or return input.Substring(startingIndex, input.Length - startingIndex);
    }

    public static string Substring(this string input, int startingIndex, int length)
    {
         // implementation 
    }
}

Вызов перегрузок, очевидно, позволяет вам максимально сохранить свою логику, не повторяя себя. Это верно в методах экземпляра, это верно в статических методах (включая, соответственно, методы расширения).

2 голосов
/ 16 сентября 2010

ИМХО, как правило, так и есть, так как это уменьшает объем кода, который вам нужно написать, и, следовательно, вероятность ошибокпростота метода.

1 голос
/ 16 сентября 2010

Да, это хорошая практика. Рассмотрим класс как некое пространство имен и группу связанных расширений вместе.

0 голосов
/ 16 сентября 2010

Конечно, это хороший дизайн, и его можно назвать DRY.

Это, однако, очень тривиальный пример.

...