Оглавление
Введение..............................................................................................................16
Для кого написана эта книга..........................................................................................16
Что необходимо для чтения......................................................................................17
Эта книга вам не подойдет, если….................................................................................17
Структура книги.......................................................................................................17
С какого места начинать чтение...............................................................................18
Оформление и условные обозначения......................................................................18
Системные требования.............................................................................................19
Загрузки: пример проекта..............................................................................................19
От издательства.............................................................................................................20
ЧАСТЬ I. СПРИНТ ПЕРВЫЙ: ПРИЛОЖЕНИЕ ALPINE SKI HOUSE ..........21
Глава 1. Что к чему....................................................................................................25
Active Server Pages.........................................................................................................26
ASP.NET..........................................................................................................................28
ASP.NET MVC..................................................................................................................32
Web API..........................................................................................................................36
ASP.NET Core..................................................................................................................38
Итоги............................................................................................................................39
Глава 2. Факторы влияния.........................................................................................40
Обратная совместимость................................................................................................41
Rails..............................................................................................................................42
Node.js...........................................................................................................................46
Angular и React...............................................................................................................47
Открытый код................................................................................................................49
OWIN............................................................................................................................49
Итоги............................................................................................................................51
Глава 3. Модели, представления и контроллеры........................................................52
M, V и C..........................................................................................................................53
Подробнее о моделях...............................................................................................53
Представления...............................................................................................................55
Частичные представления........................................................................................56
Контроллеры (…и действия!)....................................................................................57
Не только MVC...............................................................................................................58
Промежуточное ПО...................................................................................................58
8 Оглавление
Внедрение зависимостей..........................................................................................60
Другие усовершенствования.....................................................................................61
Итоги............................................................................................................................61
Глава 4. Структура проекта........................................................................................62
Лыжные склоны.............................................................................................................64
API................................................................................................................................67
Административное представление.................................................................................68
Все вместе................................................................................................................69
Определение предметной области.................................................................................70
Итоги............................................................................................................................71
Глава 5. Сборка кода..................................................................................................72
Сборка из командной строки..........................................................................................73
Билд-серверы.................................................................................................................75
Конвейер сборки............................................................................................................76
Сборка приложения Alpine Ski House..............................................................................80
Итоги............................................................................................................................87
Глава 6. Развертывание.............................................................................................88
Выбор веб-сервера.........................................................................................................89
Kestrel.......................................................................................................................90
Обратный прокси-сервер................................................................................................91
IIS.................................................................................................................................92
Nginx........................................................................................................................94
Публикация....................................................................................................................96
Типы сборок.............................................................................................................98
Сборка пакета........................................................................................................100
Несколько слов в пользу Azure...............................................................................101
Развертывание в Azure...........................................................................................103
Контейнерное развертывание......................................................................................107
Итоги..........................................................................................................................107
ЧАСТЬ II. СПРИНТ ВТОРОЙ: ПУТЕШЕСТВИЕ ДЛИНОЙ
В 1000 ШАГОВ.......................................................................................109
Глава 7. Сборка веб-приложений на платформе Microsoft Azure...............................112
Что такое PaaS.............................................................................................................113
Платформенные сервисы........................................................................................113
Оснастка, уничтожение и воссоздание сервисов ....................................................116
Проектирование приложений с использованием Platform Services................................117
Создание учетной записи хранения........................................................................118
Хранение изображений в BLOB-контейнерах...........................................................120
Интеграция очередей хранилища...........................................................................122
Автоматизация обработки с использованием Azure WebJobs...................................122
Оглавление 9
Масштабирование приложений....................................................................................124
Масштабирование в нескольких направлениях.......................................................125
Эластичное масштабирование................................................................................126
Другие факторы масштабирования.........................................................................128
Итоги..........................................................................................................................129
Глава 8. Кроссплатформенность...............................................................................130
Работа в Ubuntu...........................................................................................................131
Установка .NET Core...............................................................................................131
Dotnet CLI...............................................................................................................132
Выбор редактора кода..................................................................................................135
Проект Alpine Ski House в Linux....................................................................................136
.NET Core................................................................................................................139
Итоги..........................................................................................................................142
Глава 9. Контейнеры................................................................................................144
Повторяемые среды.....................................................................................................145
Docker.........................................................................................................................149
Контейнеры Windows...................................................................................................154
Docker в рабочей среде................................................................................................156
В облаке......................................................................................................................158
Итоги..........................................................................................................................159
Глава 10. Entity Framework Core...............................................................................160
Основы Entity Framework..............................................................................................162
Запрос на получение одной записи.........................................................................164
Запрос на получение нескольких записей...............................................................164
Сохранение данных................................................................................................165
Отслеживание изменений.......................................................................................165
Использование миграции для создания и обновления баз данных..........................166
Добавление миграций.............................................................................................167
Создание сценариев обновления для рабочих серверов.........................................171
ApplicationDbContext...............................................................................................173
Расширение ApplicationUserContext.........................................................................174
Контекст для карты................................................................................................176
Отношения, выходящие за границы контекстов......................................................177
Присоединение контроллера..................................................................................179
Типы абонементов.......................................................................................................185
Абонементы и проверка...............................................................................................187
События и обработчики событий............................................................................189
Итоги..........................................................................................................................191
Глава 11. Представления Razor................................................................................192
Создание веб-сайтов с точки зрения современного разработчика................................193
Использование предыдущих достижений и находок................................................194
10 Оглавление
Роль Razor..............................................................................................................194
Основы Razor...............................................................................................................195
Взгляд «за кулисы»................................................................................................195
Выражения в синтаксисе Razor...............................................................................198
Переключение в режим кода..................................................................................199
Явное использование разметки...............................................................................200
Памятка по управлению парсером Razor.................................................................200
Использование других возможностей C#......................................................................202
Использование типов C# в представлениях............................................................202
Определение модели..............................................................................................202
Использование данных представления...................................................................203
Работа с макетами.......................................................................................................205
Основы работы с макетами.....................................................................................206
Включение секций из представлений......................................................................208
Определение и потребление частичных представлений..........................................209
Использование расширенной функциональности Razor в представлениях..............210
Внедрение сервисов в представления.....................................................................210
Работа с тег-хелперами..........................................................................................212
Предотвращение дублирования в представлениях..................................................216
Использование альтернативных механизмов представлений........................................217
Итоги..........................................................................................................................217
Глава 12. Конфигурация и журналирование.............................................................219
Расставание с web.config........................................................................................220
Настройка конфигурации приложения....................................................................221
Использование готовых провайдеров конфигурации...............................................223
Построение собственного провайдера конфигурации.............................................224
Применение опций.................................................................................................227
Операции с журналом..................................................................................................228
Создание журналов с доступной информацией.......................................................229
Информация об исключениях.................................................................................230
Журналирование как стратегия разработки............................................................231
Уровни журналирования в ASP.NET Core.................................................................232
Применение областей действия..............................................................................236
Структурированное журналирование......................................................................238
Журналирование как сервис...................................................................................240
Итоги..........................................................................................................................242
ЧАСТЬ III. СПРИНТ ТРЕТИЙ: В ПАСТИ У ЗВЕРЯ...................................243
Глава 13. Идентификация, безопасность и управление правами..............................246
Эшелонированная оборона..........................................................................................247
Внутренние угрозы.................................................................................................247
Внешние угрозы.....................................................................................................249
Оглавление  11
Скрытые данные пользователей...................................................................................249
Аутентификация с поддержкой Azure......................................................................251
Идентификация в ASP.NET Core MVC............................................................................257
Учетные записи локальных пользователей.............................................................262
Сторонние провайдеры аутентификации .....................................................................264
Включение средств безопасности с использованием атрибутов..............................267
Применение политик для авторизации.........................................................................269
Глобальное применение политик............................................................................269
Определение специализированных политик...........................................................270
Специальные политики авторизации......................................................................271
Защита ресурсов.....................................................................................................273
Общий доступ к ресурсам независимо от источника (CORS)....................................275
Итоги..........................................................................................................................277
Глава 14. Внедрение зависимостей..........................................................................278
Что такое «внедрение зависимостей»?.........................................................................279
Ручное разрешение зависимостей...........................................................................279
Использование контейнера сервисов для разрешения зависимостей......................281
Внедрение зависимостей в ASP.NET Core.................................................................282
Использование встроенного контейнера.................................................................283
Использование стороннего контейнера...................................................................286
Итоги..........................................................................................................................288
Глава 15. Роль JavaScript..........................................................................................289
Написание хорошего кода JavaScript............................................................................290
А это вообще обязательно?..........................................................................................291
Организация кода........................................................................................................292
SPA или не SPA?...........................................................................................................293
Сборка JavaScript..........................................................................................................294
Bundler & Minifier....................................................................................................295
Grunt......................................................................................................................296
gulp........................................................................................................................298
WebPack.................................................................................................................300
Какой инструмент мне лучше подойдет?.................................................................303
TypeScript.....................................................................................................................304
Компилятор ES2015 в ES5.......................................................................................304
Загрузка модуля...........................................................................................................309
Выбор фреймворка.......................................................................................................310
Итоги..........................................................................................................................311
Глава 16. Управление зависимостями......................................................................313
NuGet..........................................................................................................................314
Установка пакетов в NuGet.....................................................................................314
Инструментарий Visual Studio..................................................................................315
12  Оглавление
npm.............................................................................................................................317
Добавление зависимостей......................................................................................318
Использование модулей npm..................................................................................318
Интеграция с Visual Studio......................................................................................319
Yarn.............................................................................................................................321
bower..........................................................................................................................323
Добавление зависимостей......................................................................................324
Обращение к ресурсам из пакетов bower................................................................325
Итоги..........................................................................................................................325
Глава 17. Стильный интерфейс................................................................................327
Создание сайтов с таблицами стилей...........................................................................328
Немного истории..........................................................................................................329
Создание собственной таблицы стилей...................................................................331
SASS в работе со стилями............................................................................................333
Основы SCSS................................................................................................................335
Переменные...........................................................................................................335
Импортирование и фрагменты................................................................................336
Вложение...............................................................................................................337
Создание примесей.................................................................................................339
Объединение примесей и директив........................................................................340
Рабочий процесс..........................................................................................................341
Инструменты командной строки..............................................................................341
Работа в Visual Studio Code ....................................................................................341
Изменение задач сборки проекта............................................................................342
Использование сторонних фреймворков.......................................................................343
Расширение фреймворка CSS.................................................................................343
Настройка используемых элементов фреймворка CSS.............................................344
Применение фреймворков CSS для специализированных таблиц стилей................344
Альтернативы для фреймворков CSS......................................................................346
Итоги..........................................................................................................................347
Глава 18. Кэширование............................................................................................348
Заголовки управления кэшированием..........................................................................350
Использование Data-Cache...........................................................................................353
Кэширование памяти..............................................................................................354
Распределенный кэш..............................................................................................355
Ограничение размера кэша..........................................................................................357
Итоги..........................................................................................................................358
ЧАСТЬ IV. СПРИНТ ЧЕТВЕРТЫЙ: ФИНИШНАЯ ПРЯМАЯ......................359
Глава 19. Многоразовый код....................................................................................362
Тег-хелперы.................................................................................................................363
Оглавление  13
Строение тег-хелперов.................................................................................................363
Тег-хелперы environment, link и script.....................................................................364
Файловые шаблоны................................................................................................365
Запрет кэширования...............................................................................................365
Тег-хелпер cache....................................................................................................367
Создание тег-хелперов...........................................................................................367
Работа с существующими атрибутами и содержимым.............................................369
Компоненты представлений....................................................................................370
Работа с компонентами представлений...................................................................372
Что случилось с дочерними действиями?................................................................372
Компонент представления для связи со службой поддержки..................................372
Частичные представления......................................................................................374
Итоги..........................................................................................................................376
Глава 20. Тестирование...........................................................................................377
Модульное тестирование..............................................................................................378
XUnit.......................................................................................................................378
Основы xUnit..........................................................................................................379
Запуск тестов.........................................................................................................380
Организация модульного тестирования..................................................................382
Тег-хелперы для тестирования...............................................................................388
Тестирование компонентов представлений.............................................................391
Тестирование кода JavaScript..................................................................................392
Другие виды тестирования...........................................................................................397
Итоги..........................................................................................................................398
Глава 21. Расширение фреймворка..........................................................................399
Соглашения..................................................................................................................400
Создание нестандартных соглашений.....................................................................401
Промежуточное ПО......................................................................................................403
Настройка конвейера..............................................................................................403
Написание промежуточного ПО..............................................................................405
Разветвление конвейера.........................................................................................407
Загрузка внешних контроллеров и представлений.......................................................408
Загрузка представлений из внешних проектов........................................................409
Загрузка контроллеров из внешних сборок.............................................................409
Маршрутизация............................................................................................................410
Маршрутизация на основе атрибутов......................................................................411
Расширенная маршрутизация.................................................................................412
Инструменты dotnet.....................................................................................................412
Изоморфные приложения и сервисы JavaScript............................................................413
Изоморфные приложения.......................................................................................413
Использование Node...............................................................................................414
Итоги..........................................................................................................................415