Проблема прокси-классов
От: Venom  
Дата: 22.04.14 05:42
Оценка:
Часто требуется возвращать из функции два/более значений.
Обычно это решается с помощью написания проксикласса под каждый конкретный кейс. Но со временем их количество накапливается и "именовать эти классы становится труднее"/"их имена становятся нечитабельными". Например такой прокси:
    public class CookieContainerStringProxy
    {
        public CookieContainer CookieContainer { get; set; }
        public String String { get; set; }
    }

Имя трудно назвать хорошим, но как его назвать иначе непонятно. Можно использовать имена типа Proxy8442 (возможно так и буду делать). В идеале, имя должно быть Proxy, но тут неизбежны коллизии. Если этот класс вынести вместе с использующим кодом в отдельный неймспейс, то всё хорошо, до тех пор пока не потребуется ещё один такой класс. И плодить неймспейсы ради проксей выглядит совсем глупо.

Можно использовать таплы, но в таком случае убивается читабельность:
proxy.CookieContainer против tuple.Item1
Поэтому таплы (лично в моём случае) отпадают.

Можно использовать враппер типа:
    public class Wrapper<T, Y>
    {
        public T Tprop { get; set; }
        public Y Yprop { get; set; }
    }

Но при использовании его, те же проблемы что и у таплов:
proxy.CookieContainer против wrapper.Tprop
Поэтому тоже не вариант.

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

Наверное есть варианты с кодогенерацией или с динамикой. Интересны любые варианты/мысли/пожелания.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.