Комбинирование extensions
От: StatujaLeha на правах ИМХО
Дата: 13.10.16 21:07
Оценка:
Задача такая:
1. Есть ряд базовых операций, которые реализованы как extensions для интерфейсов ISimpleInterfaceXXX
2. Нужно уметь плодить различные классы, которые наследуют соответствующие интерфейсы и используют их в своей логике.
3. С использованием ISimpleInterfaceXXX проблем нет.
4. Вопрос: как лучше реализовывать новые extensions, которые требуют наличия уже нескольких реализованных ISimpleInterfaceXXX?
На данный момент это сделано так, как в примере ниже: IComplexInterface + IComplexInterfaceExtensions + GetSimpleInterfaceXXX + InitializeGuard в каждом extension.

Еще варианты?

    interface ISimpleInterfaceFirst
    {
        /* Mandatory members */
    }

    static class ISimpleInterfaceFirstExtensions
    {}

    interface ISimpleInterfaceSecond
    {
        /* Mandatory members */
    }

    static class ISimpleInterfaceSecondExtensions
    {}

    interface IComplexInterface
    {
        /* Mandatory members */
    }

    static class IComplexInterfaceExtensions
    {
        private static void InitializeGuard(this IComplexInterface s)
        {
            if (!(s is ISimpleInterfaceFirst && s is ISimpleInterfaceSecond))
                throw new Exception("Bad usage");
        }

        private static ISimpleInterfaceFirst GetSimpleInterfaceFirst(this IComplexInterface s)
        {
            return s as ISimpleInterfaceFirst;
        }

        private static ISimpleInterfaceSecond GetSimpleInterfaceSecond(this IComplexInterface s)
        {
            return s as ISimpleInterfaceSecond;
        }

        public static void ExtensionMethod(this IComplexInterface s)
        {
            s.InitializeGuard();

            //Logic using ISimpleInterfaceFirst and ISimpleInterfaceSecond via GetSimpleInterfaceFirst and GetSimpleInterfaceSecond
        }
    }

    //Делаем доступными операции из обоих интерфейсов
    class SimpleLogic: ISimpleInterfaceFirst, ISimpleInterfaceSecond
    {}

    //Делаем доступными операции из обоих интерфейсов + операции, требующий реализацию обоих интерфейсов
    class ComplexLogic: ISimpleInterfaceFirst, ISimpleInterfaceSecond, IComplexInterface
    {}
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.