SergeyTeplyakov / DesignPatternsBook

Паттерны проектирования на платформе .NET
32 stars 2 forks source link

3.1 Паттерн Адаптер (Adapter) - Языковые адаптеры #171

Open davidich opened 9 years ago

davidich commented 9 years ago

TODO: нужна обратная связь от рецензентов. Насколько понятен раздел?!?!?

Раздел более чем понятен и полезен для общего развития. Но IMHO тикие примеры использования паттернов мне кажуться слегка искусственными и притянутыми за уши. Т.е. я скорее за то что бы его остатавить, потому что пример полезен, но чистота примера вызывает сомнения.

SergeyTeplyakov commented 9 years ago

Да, пример искусственный.

Проблема в том, что мне довольно сложно привести пример кастомной коллекции... Пока тогда так: раздел - оставляем. Если придет на ум более вменяемый пример - меняем пример. Иначе, останется так как есть.

SergeyUsok commented 9 years ago

Серега, возможно, я придумал пример. Если ты говоришь, что в 6 шарпе достаточно метода расширения Add и даже IEnumerable не нужен, то такая запись будет валидной, по идее:


class Program
{       
     static void Main(string[] args)
     {
          var someString = new StringBuilder { "1", "2", "3", "4" };

          // используем someString...                                    
     }
}

public static class StringBuilderExtensions
{
     public static void Add(this StringBuilder builder, string value)
     {
          builder.Append(value);
     }
}
SergeyTeplyakov commented 9 years ago

Серег, там нужно, чтобы класс реализовывал IEnumerable. Так что со стрингбилдером пример работать не будт.

SergeyUsok commented 9 years ago

Тогда плохо, а смотрелось прикольно вроде...

SergeyUsok commented 9 years ago

Я опять про пример. Возможно, стоит как пример, вставить какой-нибудь метод Rx? Тогда можно показать, как можно работать с push-коллекциями используюя sql-like linq синтаксис, можно даже твой любимый пример с троттлингом показать

SergeyTeplyakov commented 9 years ago

Пока не понял, какое отношение имеет Rx к методу расширения Add?

SergeyUsok commented 9 years ago

никакого, ты просто покажешь примером языкового адаптера не инициализатор коллекций, а sql-like синтаксис линка

SergeyTeplyakov commented 9 years ago

Не понял:) А в чем смысл показывать linq синтаксис, когда я хочу показать инициализатор коллекций? Ведь инициализатор коллекций для Rx-а - это же плохой пример.

Чего-то я запутался:(

SergeyUsok commented 9 years ago

АААА! Изначально ты хотел показать пример того, что мы можем подстроить свой код под какой синтаксический сахар так, что код будет с ним работать, так? То есть, в примере ты показал, что у тебя есть коллекция с методом Insetrt вместо Add, а сам Add там как метод расширения.

Так вот я предлагаю отойти от примера с коллекциями, и показать "адаптацию к сахару" на примере линка, тем более сам пример реален и широко используем

SergeyTeplyakov commented 9 years ago

Ага, теперь и я тебя понял.

Ок, можно подумать по этому поводу. Но тут нужен тогда не Rx, а custom Rx?

В общем, я тебя понял. Подумаю в этом направлени..

SergeyUsok commented 9 years ago

Зачем кастомный? Наоборот, приведи метод Where например, естественно не весь, а основной его функционал и пример с его использованием, заодно покажешь, что такие адаптеры не просто возможность, но они во всю используются и даже очень успешно

SergeyTeplyakov commented 9 years ago

ХЗ, это же не с нуля... Ок, я подумаю, может ты и прав.