Еще одна книга о паттернах? Дайте две!

Привет, читатель! Я хочу поговорить с тобой о паттернах проектирования. Знаешь, это такая старая штука, о которой модно было писать в конце прошлого века, и некоторые изверги о них еще иногда спрашивают на собеседованиях. У меня возникла мысль, что пришла пора снова вспомнить о них, но на этот раз рассмотреть их в современных реалиях. А разве есть более подходящий способ это сделать, кроме как взять… и написать об этом книгу?


Почему сейчас и почему о паттернах? За последние 20 лет довольно много чего произошло с современными подходами к разработке. В начале девяностых был бум DI и «программирования в файлах конфигурации», потом начался хайп вокруг DDD, в это же время стремительно начали набирать популярность техники функционального программирования. Сделало ли все это паттерны неактуальными? С моей точки зрения, нет, не сделало!

Хайп вокруг паттернов действительно прошел, и пришло время посмотреть на них с высоты нашего опыта. Для одного паттерны утратили свою актуальность, а для другого синглтон остается нашим всем. В своей книге я хочу взять какой-нибудь паттерн и рассмотреть его со всех возможных сторон: посмотреть, как он выглядит в книге «банды четырех», рассмотреть его «каноническое» современное представление, рассмотреть 3-4 типичные реализации на языке C#, подумать, как он влияет на дизайн приложения, ну и посмотреть на примеры их применения в .NET Framework и в современных приложениях.

Например, если говорить о богомерзком Синглтоне, то я приведу 4 разных реализации на платформе .NET, покажу чем классический Синглтон отличается от паттерна Ambient Context, и покажу «где» и «в каком виде» он применим в современном приложении.

Или возьму фабричный метод и рассмотрю его не только с точки зрения классической реализации, но и отвечу на вопрос, нарушает ли фабричный метод на основе словаря или switch-а принцип Открыт-Закрыт. Потом перейду к Шаблонному Методу и рассмотрю его в контексте проблем наследования и принципов проектирования по контракту, а потом сравню классический Шаблонный Метода со специфической реализацией в C# на основе лямбда-выражений.

Когда я возьму Посетитель, то не только покажу, где и когда он применяется, но и расскажу об известной проблеме программной инженерии под названием expression problem, о типичных подходах к расширяемости в мирах объектно-ориентированного и функционального программирования, о роли паттерна Посетитель в контексте принципа Открыт/Закрыт.

Я расскажу о «строителях» не просто на примерах диаграмм классов из банды четырех, а в несколько ином контексте, например, для создания тестовых данных для юнит и интеграционных тестов.

Хочется не просто рассказать о паттернах, со скучными каноническими диаграммами классов, некоторые из которых невозможно встретить в реальном коде. Хочется взять ключевые GoF-паттерны и показать, как они эволюционировали, как они обычно реализуются на языке C#, и как сильно они въелись в сам .NET Framework и наши с вами пальцы.

А к чему это я веду? Дело в том, уважаемый Читатель, что мне нужна твоя помощь. Издатель (в лице издательского дома Питер a.k.a ph_piter) готов взяться за эту книгу, но ему нужно мнение сообщества по поводу актуальности ее актуальности (это не очепятка!). Мы-то с вами готовы жертвовать своим временем в ущерб семьи и других интересов, но бизнес следует несколько иным принципам.

Так что, уважаемые камрады (и камрадки), если вам хотелось бы увидеть эту книгу в печатном виде, то отреагируйте как-нить в комментах или другим удобным способом.

З.Ы. Если нужно содержание книги, то я готов его выложить, хотя оно будет мало чем отличаться от содержания классической книги банды четырех, с некоторыми ответвлениями.

З.Ы.Ы. Спасибо ИД Питер a.k.a. ph_piter, что готов взяться вместе со мной за это дело!

Интересна ли будет такая книга?

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

Никто ещё не голосовал. Воздержавшихся нет.

ссылка на оригинал статьи http://habrahabr.ru/post/230873/

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *