Расширение модели интерфейса

новые расширения в .Net 3.5 позволяют возможности, которые будут вынесены из интерфейсов.

например, в .Net 2.0

public interface IHaveChildren {
    string ParentType { get; }
    int ParentId { get; }

    List<IChild> GetChildren()
}

Может (в 3.5) становятся:

public interface IHaveChildren {
    string ParentType { get; }
    int ParentId { get; }
}

public static class HaveChildrenExtension {
    public static List<IChild> GetChildren( this IHaveChildren ) {
        //logic to get children by parent type and id
        //shared for all classes implementing IHaveChildren 
    }
}

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

единственный недостаток, что, будучи абстрактным основы реализации, может быть виртуальным, но это можно обойти (метод экземпляра скрыть модуль метод с тем же именем? это будет запутанный код, чтобы сделать так?")

Любой другой причины, чтобы не регулярно использовать этот прием?


Примечание:

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

я думаю, что есть целый наилучшей практики дебаты ;-)

(Кстати: DannySmurf, ваши PM звучит страшно.)

я специально прошу здесь об использовании методов расширения где раньше был у нас методы интерфейса.


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

это то, что MS сделал IEnumerable и IQueryable для Linq?

Найдено 11 ответ:

Extension interface patterns

http://stackoverflow.com/questions/8042/extension-interface-patterns

Посмотреть решение →