Введение....18
Кому подойдет эта книга....18
Структура издания....19
Как получить максимум от книги....20
Загрузка файлов с примерами....21
Код в действии....21
Полноцветные изображения....21
Условные обозначения....21
О научных редакторах....17
Об авторах....16
Предисловие....14
Часть I. Основы паттернов проектирования в C# и .NET Core....23
Глава 1. Обзор ООП в .NET Core и C#....24
Технические требования....25
Установка Visual Studio....25
Установка .NET Core....25
Используемые в книге модели....26
Определение ООП. Как работают классы и объекты....28
Определение ООП....28
Класс....29
Объект....30
Интерфейс....33
Наследование....34
Инкапсуляция....36
Полиморфизм....36
Статический полиморфизм....37
Динамический полиморфизм....38
Резюме....40
Вопросы....41
Глава 2 Современные паттерны и принципы проектирования ПО....42
Технические требования....43
Установка Visual Studio....43
Установка .NET Core....43
Принципы проектирования....44
DRY — «Не повторяйся»....44
KISS — «Делай проще, тупица»....44
YAGNI — «Вам это не понадобится»....45
MVP — «Продукт с минимальным функционалом»....45
SOLID....45
Паттерны программного обеспечения....47
Паттерны «Банды четырех»....47
Паттерны интеграции корпоративных приложений....59
Паттерны жизненного цикла разработки программного обеспечения....65
Waterfall SDLC....65
Agile SDLC....66
Резюме....67
Вопросы....68
Часть II. Углубленное изучение утилит и паттернов .NET Core....69
Глава 3. Реализация паттернов проектирования — основы (часть 1)....70
Технические требования....71
Установка Visual Studio....71
Установка .NET Core....71
Продукт с минимальным функционалом....71
Требования....72
Каковы преимущества MVP в дальнейшей разработке....74
Разработка через тестирование....75
Почему разработчики выбирают TDD....76
Настройка проектов....77
Определения начальных модульных тестов....80
Паттерн проектирования «Абстрактная фабрика»....82
Принципы SOLID....87
Принцип единственной ответственности (SRP)....87
Принцип открытости/закрытости (OCP)....88
Принцип замещения Лисков (LSP)....89
Принцип сегрегации интерфейса (ISP)....90
Принцип инверсии зависимостей....91
Модульные тесты для InventoryCommand....93
Резюме....98
Вопросы....99
Глава 4. Реализация паттернов проектирования — основы (часть 2)....100
Технические требования....101
Установка Visual Studio....101
Установка .NET Core....101
Паттерн «Синглтон»....101
Процессы и потоки....102
Паттерн «Репозиторий» ....104
Модульные тесты....105
Иллюстрация состояния гонки....112
Класс AddInventoryCommand ....115
Класс UpdateQuanittyCommand....119
Команда GetInventoryCommand ....121
Паттерн «Фабрика»....123
Модульные тесты....124
Функциональность .NET Core....128
Интерфейс IServiceCollection ....128
Интерфейс CatalogService....129
IServiceProvider....130
Консольное приложение....131
Резюме....133
Вопросы....133
Глава 5. Реализация паттернов проектирования в .Net Core....134
Технические требования....134
Установка Visual Studio....135
Установка .NET Core....135
Время жизни сервисов в .Net Core....135
Временная зависимость (Transient)....136
Время жизни области применения (Scoped)....136
«Синглтон» в .Net Core....136
Вернемся к FlixOne....136
Время жизни области применения (Scope)....142
Внедрение фабрики....143
Интерфейс IInventoryContext....144
Интерфейс IInventoryReadContext....144
Интерфейс IInventoryWriteContext....145
Класс InventoryCommandFactory....146
Класс InventoryCommand....147
Резюме....155
Вопросы....156
Глава 6. Реализация паттернов проектирования для веб-приложений (часть 1)....157
Технические требования....157
Установка Visual Studio....158
Установка .NET Core....158
Установка SQL Server....158
Создание веб-приложения .NET Core....159
Запуск проекта....159
Разработка веб-приложения....160
Реализация CRUD-страниц ....166
Резюме....176
Вопросы....177
Дальнейшее чтение....177
Глава 7. Реализация паттернов проектирования для веб-приложений (часть 2)....178
Технические требования....178
Установка Visual Studio....179
Установка .NET Core....179
Установка SQL Server....179
Расширение веб-приложения .NET Core....180
Начало проекта....180
Аутентификация и авторизация....182
Аутентификация в действии....187
Авторизация в действии....197
Создание тестового проекта веб-приложения....205
Резюме....209
Вопросы....209
Дальнейшее чтение....210
Часть III. Функциональное программирование, реактивное программирование и кодирование для облака....211
Глава 8 . Конкурентное программирование в .NET Core....212
Технические требования....212
Установка Visual Studio....213
Установка .NET Core....213
Установка SQL Server....213
Конкурентность в реальном мире....214
Многопоточное и асинхронное программирование....216
Async/Await — чем плоха блокировка....219
Конкурентная коллекция....220
Паттерны и рекомендации — TDD и параллельный LINQ....221
Резюме....227
Вопросы....228
Дальнейшее чтение....228
Глава 9. Функциональное программирование....229
Технические требования....229
Установка Visual Studio....230
Установка .NET Core....230
Установка SQL Server....230
Основы функционального программирования....231
Совершенствование приложения FlixOne....235
Требования....236
Вернемся к FlixOne....237
Паттерн «Стратегия» и функциональное программирование....242
Резюме....243
Вопросы....244
Глава 10. Модели и методы реактивного программирования....245
Технические требования....245
Установка Visual Studio....246
Установка .NET Core....246
Установка SQL Server....246
Принципы реактивного программирования....247
Будьте реактивны с реактивным программированием....249
Реактивность и интерфейс IObservable....257
Паттерн «Наблюдатель» — реализация с помощью IObservable....257
Реактивные расширения: .NET Rx Extensions....264
Настройка приложения FlixOne....266
Начало проекта....266
Применение в приложении FlixOne фильтрации, пагинации и сортировки....267
Паттерны и практики — MVVM....275
Реализация MVVM....277
Резюме....282
Вопросы....283
Дальнейшее чтение....283
Глава 11. Усовершенствованные методы проектирования и применения баз данных....284
Технические требования....284
Установка Visual Studio....285
Установка .NET Core....285
Установка SQL Server....285
Обсуждение примера использования....286
Начало проекта....286
Требования....287
Поговорим о базах данных....289
Обработка баз данных....289
OLTP....290
OLAP....291
Базы данных в стиле бухгалтерской книги....291
Реализация паттерна CQRS....293
Резюме....307
Вопросы....308
Глава 12. Разработка облачных приложений....309
Технические требования....310
Ключевые моменты, которые следует учитывать при разработке облачных решений....310
Масштабируемость....311
Рабочая нагрузка....311
Паттерны....312
Устойчивость/доступность....319
Паттерны решений....320
Безопасность....323
Паттерны решений....323
Проектирование приложения....325
Паттерны решений....325
DevOps....330
Паттерны решений....330
Резюме....333
Вопросы....334
Дальнейшее чтение....334
Приложения....335
Приложение А. Практические рекомендации....336
Технические требования....336
Обсуждение примера использования....337
UML-диаграмма....338
Практические рекомендации....339
Другие паттерны проектирования....340
Резюме....341
Вопросы....342
Дальнейшее чтение....342
Приложение Б. Ответы на вопросы....343
Глава 1. Обзор ООП в .NET Core и C#....343
Глава 2. Современные паттерны и принципы проектирования ПО....343
Глава 3. Реализация паттернов проектирования — основы (часть 1)....344
Глава 4. Реализация паттернов проектирования — основы (часть 2)....345
Глава 5. Реализация паттернов проектирования в .Net Core....345
Глава 6. Реализация паттернов проектирования для веб-приложений (часть 1)....346
Глава 7. Реализация паттернов проектирования для веб-приложений (часть 2)....346
Глава 8. Конкурентное программирование в .NET Core....347
Глава 9. Функциональное программирование....348
Глава 10. Модели и методы реактивного программирования....348
Глава 11. Усовершенствованные методы проектирования и применения баз данных....350
Глава 12. Разработка облачных приложений....350
Приложение А. Практические рекомендации....351
В этой книге на конкретных примерах описываются способы использования паттернов в современной разработке приложений. Количество паттернов, применяемых для поиска решений, огромно. Чаще всего разработчики пользуются ими, не понимая в полной мере, что и как эти паттерны делают. В издании рассматриваются паттерны от низкоуровневого кода до высокоуровневых концептуальных решений, которые работают в облачных системах.Несмотря на то что большинство паттернов не требуют применения конкретного языка, для иллюстрации многих из них мы используем C# и .NET Core. Эти технологии были выбраны из-за их популярности и удобства архитектуры, на основе которой можно создавать различные решения — от простых консольных приложений до крупных корпоративных распределенных систем.Описывая большое количество паттернов, эта книга знакомит со многими из них, позволяет глубже понять их на практике. Представленные паттерны были выбраны, чтобы проиллюстрировать определенные аспекты проектирования. Кроме того, добавлены ссылки на дополнительные материалы, которые помогут читателю подробнее изучить конкретный интересующий его паттерн.И в простых сайтах, и в огромных корпоративных системах правильно подобранный паттерн может в корне изменить заведомо неверное решение, ведущее к краху проекта из-за его высокой стоимости и низкой производительности, и превратить это решение в выгодное, долгоживущее и успешное. Паттерны, описанные в книге, призваны преодолеть неизбежные проблемы, которые иначе не позволили бы вам оставаться конкурентоспособными. Они также позволят вашим приложениям достичь устойчивости и надежности, которыми должны обладать современные проекты.