Паттерны проектирования на платформе .NET

Руководство для профессионалов.

Сергей Тепляков "Паттерны проектирования на платформе .NET" Питер, 2015 год, 320 стр. (18,3 мб. pdf)

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

Также в книге дается объяснение некоторых аспектов использования паттернов в современных .NET-приложениях. В издании присутствуют подробные описания классических паттернов проектирования, раскрыты особенности их использования на платформе .NET. Приводятся характерные примеры их использования в .NET Framework. Большое внимание уделено основным принципам проектирования (SOLID). Вы научитесь применять их при проектировании и разработке собственных приложений. Это руководство для профессиональных программистов, изучающих особенности классических принципов и паттернов программирования. Все примеры выполнены на языке C#, что дает возможность понять роль паттернов в разработке современных приложений на платформе .NET

ISBN: 978-5-496-01649-0

Оглавление книги.

Часть I. Паттерны поведения

Глава 1. Паттерн «Стратегия» (Strategy) 28
Мотивация 28
Варианты реализации в NET 30
Обсуждение паттерна «Стратегия» 31
Выделять интерфейс или нет 32
Интерфейс vs делегат 32
Применимость 35
Примеры в NET Framework 36

Глава 2. Паттерн «Шаблонный метод» (Template Method) 37
Мотивация 37
Варианты реализации в NET 39
Локальный шаблонный метод на основе делегатов 39
Шаблонный метод на основе методов расширения 42
Обсуждение паттерна «Шаблонный метод» 44
Изменение уровня абстракции 44
Стратегия vs шаблонный метод 45
Шаблонный метод и обеспечение тестируемости 46
Шаблонный метод и контракты 48
Применимость 50
Примеры в NET Framework 50

Глава 3. Паттерн «Посредник» (Mediator) 57
Мотивация 57
Обсуждение паттерна «Посредник» 60
Явный и неявный посредник 61
Явные и неявные связи 62
Тестировать или не тестировать? Вот в чем вопрос! 64
Архитектурные посредники 65
Применимость 66
Когда третий лишний 66
Примеры в NET Framework 66

Глава 4. Паттерн «Итератор» (Iterator) 68
Мотивация 68
Обсуждение 70
Особенности итераторов в C#/ NET 72
«Ленивость» итераторов 76
Использование итераторов в цикле foreach 76
Итераторы или генераторы 78
Валидность итераторов 79
Итераторы и структуры 80
Push-based-итераторы 80
Применимость 81
Примеры в NET Framework 82

Глава 5. Паттерн «Наблюдатель» (Observer) 83
Общие сведения 83
Мотивация 84
Варианты реализации 86
Методы обратного вызова 86
События 87
Строго типизированный наблюдатель 89
IObserver/IObservable 90
Обсуждение паттерна «Наблюдатель» 93
Выбор варианта реализации «Наблюдателя» 93
Делегаты 93
События 94
Наблюдатель в виде специализированного интерфейса 94
Сколько информации передавать наблюдателю 95
Наблюдатели и утечки памяти 97
Применимость 98
Примеры в NET Framework 99

Глава 6. Паттерн «Посетитель» (Visitor) 100
Мотивация 100
Обсуждение 105
Оглавление 9
Функциональная vs Объектная версия 105
Двойная диспетчеризация 108
Интерфейс vs абстрактный класс посетителя 109
Применимость 110
Примеры в NET Framework 111

Глава 7. Другие паттерны поведения 112
Паттерн «Команда» 112
Паттерн «Состояние» 114
Паттерн «Цепочка обязанностей» 116

Часть II. Порождающие паттерны

Глава 8. Паттерн «Синглтон» (Singleton) 122
Мотивация 122
Варианты реализации в NET 123
Реализация на основе Lazy of T 123
Блокировка с двойной проверкой 124
Реализация на основе инициализатора статического поля 126
Обсуждение паттерна «Синглтон» 129
Singleton vs Ambient Context 129
Singleton vs Static Class 132
Особенности и недостатки 132
Применимость: паттерн или антипаттерн 134
Примеры в NET Framework 135
Дополнительные ссылки 136

Глава 9. Паттерн «Абстрактная фабрика» (Abstract Factory) 137
Мотивация 138
Обсуждение паттерна «Абстрактная фабрика» 141
Проблема курицы и яйца 141
Обобщенная абстрактная фабрика 142
Применимость паттерна «Абстрактная фабрика» 143
Примеры в NET Framework 144

Глава 10. Паттерн «Фабричный метод» (Factory Method) 145
Мотивация 145
Диаграмма паттерна «Фабричный метод» 147
Классическая реализация 147
Статический фабричный метод 148
Полиморфный фабричный метод 148
Варианты реализации 149
Использование делегатов в статической фабрике 149
Обобщенные фабрики 150
Обсуждение паттерна «Фабричный метод» 153
Сокрытие наследования 153
Устранение наследования 154
Использование Func в качестве фабрики 156
Конструктор vs фабричный метод 156
Применимость паттерна «Фабричный метод» 157
Применимость классического фабричного метода 157
Применимость полиморфного фабричного метода 157
Применимость статического фабричного метода 158
Примеры в NET Framework 158

Глава 11. Паттерн «Строитель» (Builder) 160
Мотивация 160
Особенности реализации в NET 164
Использование текучего интерфейса 164
Методы расширения 165
Обсуждение паттерна «Строитель» 167
Строго типизированный строитель 167
Создание неизменяемых объектов 170
Частичная изменяемость 171
Оглавление 11
Применимость 173
Примеры в NET Framework 174

Часть III. Структурные паттерны

Глава 12. Паттерн «Адаптер» (Adapter) 188
Мотивация 188
Обсуждение паттерна «Адаптер» 191
Адаптер классов и объектов 191
Адаптивный рефакторинг 192
Языковые адаптеры 194
Применимость 196
Примеры в NET Framework 196

Глава 13. Паттерн «Фасад» (Facade) 197
Мотивация 197
Обсуждение паттерна «Фасад» 199
Инкапсуляция стороннего кода 199
Повышение уровня абстракции 199
Применимость 200
Примеры в NET Framework 200

Глава 14. Паттерн «Декоратор» (Decorator) 201
Мотивация 201
Обсуждение паттерна «Декоратор» 205
Композиция vs наследование 205
Инициализация декораторов 207
Недостатки декораторов 208
Генерация декораторов 208
Применимость 209
Примеры в NET Framework 209

Глава 15. Паттерн «Компоновщик» (Composite) 214
Мотивация 214
Обсуждение паттерна «Компоновщик» 218
Применимость 219
Примеры в NET Framework 220

Глава 16. Паттерн «Заместитель» (Proxy) 221
Мотивация 221
Обсуждение паттерна «Заместитель» 223
Прозрачный удаленный заместитель 224
Заместитель vs декоратор 224
Виртуальный заместитель и Lazy<T> 225
Применимость 226
Примеры в NET Framework 226

Часть IV. Принципы проектирования

Глава 17. Принцип единственной обязанности 231
Для чего нужен SRP 233
Принцип единственной обязанности на практике 233
Типичные примеры нарушения SRP 241
Выводы 242

Глава 18. Принцип «открыт/закрыт» 243
Путаница с определениями 244
Какую проблему призван решить принцип «открыт/закрыт» 247
Принцип «открыт/закрыт» на практике 248
Закрытость интерфейсов 248
Открытость поведения 251
Принцип единственного выбора 253
Расширяемость: объектно-ориентированный и функциональный подходы 254
Типичные примеры нарушения принципа «открыт/закрыт» 258
Выводы 258

Глава 19. Принцип подстановки Лисков 260
Для чего нужен принцип подстановки Лисков 262
Классический пример нарушения: квадраты и прямоугольники 263
Принцип подстановки Лисков и контракты 265
О сложностях наследования в реальном мире 265
Когда наследования бывает слишком мало 268
Принцип подстановки Лисков на практике 270
Типичные примеры нарушения LSP 273
Выводы 273
Дополнительные ссылки 274

Глава 20. Принцип разделения интерфейсов 275
Для чего нужен принцип разделения интерфейса 276
SRP vs ISP 278
Принцип разделения интерфейсов на практике 279
Типичные примеры нарушения ISP 282
Выводы 282

Глава 21. Принцип инверсии зависимостей 284
Интерфейсы 285
Слои 286
Наблюдатели 288
Для чего нужен принцип инверсии зависимостей 291
Остерегайтесь неправильного понимания DIP 293
Тестируемость решения vs подрыв инкапсуляции 294
Принцип инверсии зависимостей на практике 295
Примеры нарушения принципа инверсии зависимостей 300
Выводы 300
Дополнительные ссылки 304

Глава 22. Размышления о принципах проектирования 305
Использование принципов проектирования 307
Правильное использование принципов проектирования 308
Антипринципы проектирования 310
Заключение 311
Источники информации 313
Книги о дизайне и ООП 313
Статьи 316

 

 

Скачать книгу бесплатно18,3 мб. pdf