Паттерны проектирования на платформе .NET
Сергей Тепляков
Паттерны проектирования остаются важным инструментом в арсенале разработчика, поскольку они опираются на фундаментальные принципы проектирования. Тем не менее, появление новых конструкций в современных языках программирования делает одни паттерны более важными, а значимость других сводит к минимуму.
Цель данной книги - показать, как изменились паттерны проектирования за это время, как на них повлияло современное увлечение функциональным программированием, и объяснить, каким образом они используются в современных .NET-приложениях. В издании вы найдете подробное описание классических паттернов проектирования с особенностями их реализации на платформе .NET, а также примеры их использования в .NET Framework. Вы также изучите принципы проектирования, известные под аббревиатурой SOLID, и научитесь применять их при разработке собственных приложений.
Книга предназначена для профессиональных программистов, которые хотят изучить особенности классических принципов и паттернов программирования с примерами на языке C# и понять их роль в разработке современных приложений на платформе .NET.
Издательство: Питер, 2016 г.
ISBN 978-5-496-01649-0
Количество страниц: 320.
Содержание книги «Паттерны проектирования на платформе .NET»:
- 15 Об авторе
- 16 Кому адресована эта книга
- 17 Как читать эту книгу
- 18 Отзывы
- 19 Благодарности
- 20 От издательства
- 21 Предисловие
- 21 GoF-паттерны на платформе .NET
- 22 Отношение к паттернам проектирования
- 24 Фреймворки паттернов
- 25 Гибкость vs. конкретность
- 25 Для чего нужна еще одна книга о паттернах
- 28 Часть I. Паттерны поведения
- 28 Глава 1. Паттерн «Стратегия» (Strategy)
- 28 Мотивация
- 30 Варианты реализации в .NET
- 31 Обсуждение паттерна «Стратегия»
- 32 Выделять интерфейс или нет
- 32 Интерфейс vs. делегат
- 35 Применимость
- 36 Примеры в .NET Framework
- 37 Глава 2. Паттерн «Шаблонный метод» (Template Method)
- 37 Мотивация
- 39 Варианты реализации в .NET
- 39 Локальный шаблонный метод на основе делегатов
- 42 Шаблонный метод на основе методов расширения
- 44 Обсуждение паттерна «Шаблонный метод»
- 44 Изменение уровня абстракции
- 45 Стратегия vs. шаблонный метод
- 46 Шаблонный метод и обеспечение тестируемости
- 48 Шаблонный метод и контракты
- 50 Применимость
- 50 Примеры в .NET Framework
- 57 Глава 3. Паттерн «Посредник» (Mediator)
- 57 Мотивация
- 60 Обсуждение паттерна «Посредник»
- 61 Явный и неявный посредник
- 62 Явные и неявные связи
- 64 Тестировать или не тестировать? Вот в чем вопрос!
- 65 Архитектурные посредники
- 66 Применимость
- 66 Когда третий лишний
- 66 Примеры в .NET Framework
- 68 Глава 4. Паттерн «Итератор» (Iterator)
- 68 Мотивация
- 70 Обсуждение
- 72 Особенности итераторов в C#/.NET
- 76 «Ленивость» итераторов
- 76 Использование итераторов в цикле foreach
- 78 Итераторы или генераторы
- 79 Валидность итераторов
- 80 Итераторы и структуры
- 80 Push-based-итераторы
- 81 Применимость
- 82 Примеры в .NET Framework
- 83 Глава 5. Паттерн «Наблюдатель» (Observer)
- 83 Общие сведения
- 84 Мотивация
- 86 Варианты реализации
- 86 Методы обратного вызова
- 87 События
- 89 Строго типизированный наблюдатель
- 90 IObserver/IObservable
- 93 Обсуждение паттерна «Наблюдатель»
- 93 Выбор варианта реализации «Наблюдателя»
- 93 Делегаты
- 94 События
- 94 Наблюдатель в виде специализированного интерфейса
- 95 Сколько информации передавать наблюдателю
- 97 Наблюдатели и утечки памяти
- 98 Применимость
- 99 Примеры в .NET Framework
- 100 Глава 6. Паттерн «Посетитель» (Visitor)
- 100 Мотивация
- 105 Обсуждение
- 105 Функциональная vs. Объектная версия
- 108 Двойная диспетчеризация
- 109 Интерфейс vs. абстрактный класс посетителя
- 110 Применимость
- 111 Примеры в .NET Framework
- 112 Глава 7. Другие паттерны поведения
- 112 Паттерн «Команда»
- 114 Паттерн «Состояние»
- 116 Паттерн «Цепочка обязанностей»
- 122 Часть II. Порождающие паттерны
- 122 Глава 8. Паттерн «Синглтон» (Singleton)
- 122 Мотивация
- 123 Варианты реализации в .NET
- 123 Реализация на основе Lazy of T
- 124 Блокировка с двойной проверкой
- 126 Реализация на основе инициализатора статического поля
- 129 Обсуждение паттерна «Синглтон»
- 129 Singleton vs. Ambient Context
- 132 Singleton vs. Static Class
- 132 Особенности и недостатки
- 134 Применимость: паттерн или антипаттерн
- 135 Примеры в .NET Framework
- 136 Дополнительные ссылки
- 137 Глава 9. Паттерн «Абстрактная фабрика» (Abstract Factory)
- 138 Мотивация
- 141 Обсуждение паттерна «Абстрактная фабрика»
- 141 Проблема курицы и яйца
- 142 Обобщенная абстрактная фабрика
- 143 Применимость паттерна «Абстрактная фабрика»
- 144 Примеры в .NET Framework
- 145 Глава 10. Паттерн «Фабричный метод» (Factory Method)
- 145 Мотивация
- 147 Диаграмма паттерна «Фабричный метод»
- 147 Классическая реализация
- 148 Статический фабричный метод
- 148 Полиморфный фабричный метод
- 149 Варианты реализации
- 149 Использование делегатов в статической фабрике
- 150 Обобщенные фабрики
- 153 Обсуждение паттерна «Фабричный метод»
- 153 Сокрытие наследования
- 154 Устранение наследования
- 156 Использование Func в качестве фабрики
- 156 Конструктор vs. фабричный метод
- 157 Применимость паттерна «Фабричный метод»
- 157 Применимость классического фабричного метода
- 157 Применимость полиморфного фабричного метода
- 158 Применимость статического фабричного метода
- 158 Примеры в .NET Framework
- 160 Глава 11. Паттерн «Строитель» (Builder)
- 160 Мотивация
- 164 Особенности реализации в .NET
- 164 Использование текучего интерфейса
- 165 Методы расширения
- 167 Обсуждение паттерна «Строитель»
- 167 Строго типизированный строитель
- 170 Создание неизменяемых объектов
- 171 Частичная изменяемость
- 173 Применимость
- 174 Примеры в .NET Framework
- 188 Часть III. Структурные паттерны
- 188 Глава 12. Паттерн «Адаптер» (Adapter)
- 188 Мотивация
- 191 Обсуждение паттерна «Адаптер»
- 191 Адаптер классов и объектов
- 192 Адаптивный рефакторинг
- 194 Языковые адаптеры
- 196 Применимость
- 196 Примеры в .NET Framework
- 197 Глава 13. Паттерн «Фасад» (Facade)
- 197 Мотивация
- 199 Обсуждение паттерна «Фасад»
- 199 Инкапсуляция стороннего кода
- 199 Повышение уровня абстракции
- 200 Применимость
- 200 Примеры в .NET Framework
- 201 Глава 14. Паттерн «Декоратор» (Decorator)
- 201 Мотивация
- 205 Обсуждение паттерна «Декоратор»
- 205 Композиция vs. наследование
- 207 Инициализация декораторов
- 208 Недостатки декораторов
- 208 Генерация декораторов
- 209 Применимость
- 209 Примеры в .NET Framework
- 214 Глава 15. Паттерн «Компоновщик» (Composite)
- 214 Мотивация
- 218 Обсуждение паттерна «Компоновщик»
- 219 Применимость
- 220 Примеры в .NET Framework
- 221 Глава 16. Паттерн «Заместитель» (Proxy)
- 221 Мотивация
- 223 Обсуждение паттерна «Заместитель»
- 224 Прозрачный удаленный заместитель
- 224 Заместитель vs. декоратор
- 225 Виртуальный заместитель и Lazy
- 226 Применимость
- 226 Примеры в .NET Framework
- 231 Часть IV. Принципы проектирования
- 231 Глава 17. Принцип единственной обязанности
- 233 Для чего нужен SRP
- 233 Принцип единственной обязанности на практике
- 241 Типичные примеры нарушения SRP
- 242 Выводы
- 243 Глава 18. Принцип «открыт/закрыт»
- 244 Путаница с определениями
- 247 Какую проблему призван решить принцип «открыт/закрыт»
- 248 Принцип «открыт/закрыт» на практике
- 248 Закрытость интерфейсов
- 251 Открытость поведения
- 253 Принцип единственного выбора
- 254 Расширяемость: объектно-ориентированный и функциональный подходы
- 258 Типичные примеры нарушения принципа «открыт/закрыт»
- 258 Выводы
- 260 Глава 19. Принцип подстановки Лисков
- 262 Для чего нужен принцип подстановки Лисков
- 263 Классический пример нарушения: квадраты и прямоугольники
- 265 Принцип подстановки Лисков и контракты
- 265 О сложностях наследования в реальном мире
- 268 Когда наследования бывает слишком мало
- 270 Принцип подстановки Лисков на практике
- 273 Типичные примеры нарушения LSP
- 273 Выводы
- 274 Дополнительные ссылки
- 275 Глава 20. Принцип разделения интерфейсов
- 276 Для чего нужен принцип разделения интерфейса
- 278 SRP vs. ISP
- 279 Принцип разделения интерфейсов на практике
- 282 Типичные примеры нарушения ISP
- 282 Выводы
- 284 Глава 21. Принцип инверсии зависимостей
- 285 Интерфейсы
- 286 Слои
- 288 Наблюдатели
- 291 Для чего нужен принцип инверсии зависимостей
- 293 Остерегайтесь неправильного понимания DIP
- 294 Тестируемость решения vs. подрыв инкапсуляции
- 295 Принцип инверсии зависимостей на практике
- 300 Примеры нарушения принципа инверсии зависимостей
- 300 Выводы
- 304 Дополнительные ссылки
- 305 Глава 22. Размышления о принципах проектирования
- 307 Использование принципов проектирования
- 308 Правильное использование принципов проектирования
- 310 Антипринципы проектирования
- 311 Заключение
- 313 Источники информации
- 313 Книги о дизайне и ООП
- 316 Статьи
Инструкция как скачать книгу Сергей Тепляков: Паттерны проектирования на платформе .NET в форматах DjVu, PDF, DOC или fb2 совершенно бесплатно.