Чистая архитектура. Искусство разработки программного обеспечения

This document was uploaded by one of our users. The uploader already confirmed that they had the permission to publish it. If you are author/publisher or own the copyright of this documents, please report to us by using this DMCA report form.

Simply click on the Download Book button.

Yes, Book downloads on Ebookily are 100% Free.

Sometimes the book is free on Amazon As well, so go ahead and hit "Search on Amazon"

«Идеальный программист» и «Чистый код» — легендарные бестселлеры Роберта Мартина — рассказывают, как достичь высот профессионализма. «Чистая архитектура» продолжает эту тему, но не предлагает несколько вариантов в стиле «решай сам», а объясняет, что именно следует делать, по какой причине и почему именно такое решение станет принципиально важным для вашего успеха. Роберт Мартин дает прямые и лаконичные ответы на ключевые вопросы архитектуры и дизайна. «Чистую архитектуру» обязаны прочитать разработчики всех уровней, системные аналитики, архитекторы и каждый программист, который желает подняться по карьерной лестнице или хотя бы повлиять на людей, которые занимаются данной работой.

Author(s): Мартин Р
Series: Библиотека программиста
Publisher: Питер
Year: 2018

Language: Russian
Pages: 352

Предисловие 14
От издательства 17
Вступление 18
Благодарности 21
Об авторе 22

Часть I. Введение 23

Глава 1. Что такое дизайн и архитектура? . . . . . . . . . . . . . . . . . . . . . . . 25
Цель? 26
Пример из практики 27
Заключение 33

Глава 2. История о двух ценностях . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
Поведение 36
Архитектура 36
Наибольшая ценность 37
Матрица Эйзенхауэра 38
Битва за архитектуру 39

Часть II. Начальные основы: парадигмы программирования . . . 41

Глава 3. Обзор парадигм . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
Структурное программирование 44
Объектно-ориентированное программирование 44
Функциональное программирование 45
Пища для ума 45
Заключение 46

Глава 4. Структурное программирование . . . . . . . . . . . . . . . . . . . . . . . . 47
Доказательство 48
Объявление вредным 50
Функциональная декомпозиция 51
Формальные доказательства отсутствуют 51
Наука во спасение 52
Тестирование 52
Заключение 53

Глава 5. Объектно-ориентированное программирование . . . . . . . . . . . 54
Инкапсуляция? 55
Наследование? 58
Полиморфизм? 60
Заключение 66
Глава 6. Функциональное программирование . . . . . . . . . . . . . . . . . . . . 67
Квадраты целых чисел 68
Неизменяемость и архитектура 69
Ограничение изменяемости 70
Регистрация событий 72
Заключение 73

Часть III. Принципы дизайна 75

Глава 7. Принцип единственной ответственности . . . . . . . . . . . . . . . . . 78
Признак 1: непреднамеренное дублирование 80
Признак 2: слияния 81
Решения 82
Заключение 84

Глава 8. Принцип открытости/закрытости . . . . . . . . . . . . . . . . . . . . . . . 85
Мысленный эксперимент 86
Управление направлением 90
Сокрытие информации 90
Заключение 90

Глава 9. Принцип подстановки Барбары Лисков . . . . . . . . . . . . . . . . . . 91
Руководство по использованию наследования 92
Проблема квадрат/прямоугольник 92
LSP и архитектура 93
Пример нарушения LSP 94
Заключение 95

Глава 10. Принцип разделения интерфейсов . . . . . . . . . . . . . . . . . . . . . 96
Принцип разделения интерфейсов и язык 98
Принцип разделения интерфейсов и архитектура 98
Заключение 99

Глава 11. Принцип инверсии зависимости . . . . . . . . . . . . . . . . . . . . . . 100
Стабильные абстракции 101
Фабрики 102
Конкретные компоненты 104
Заключение 104

Часть IV. Принципы организации компонентов . . . . . . . . . . . . . . 105

Глава 12. Компоненты . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106
Краткая история компонентов 107
Перемещаемость 110
Компоновщики 110
Заключение 112

Глава 13. Связность компонентов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113
Принцип эквивалентности повторного использования
и выпусков 114
Принцип согласованного изменения 115
Принцип совместного повторного использования 117
Диаграмма противоречий для определения связности
компонентов 118
Заключение 119

Глава 14. Сочетаемость компонентов . . . . . . . . . . . . . . . . . . . . . . . . . . 121
Принцип ацикличности зависимостей 122
Проектирование сверху вниз 128
Принцип устойчивых зависимостей 129
Принцип устойчивости абстракций 135
Заключение 142


Часть V. Архитектура 143

Глава 15. Что такое архитектура . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144
Разработка 146
Развертывание 146
Эффективность работы 147
Сопровождение 148
Сохранение разнообразия вариантов 148
Независимость от устройства 150
Нежелательная почта 152
Физическая адресация 153
Заключение 154

Глава 16. Независимость . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155
Варианты использования 156
Эффективность работы 156
Разработка 157
Развертывание 157
Сохранение разнообразия вариантов 158
Разделение уровней 158
Разделение вариантов использования 159
Режим разделения 160
Возможность независимой разработки 161
Возможность независимого развертывания 161
Дублирование 162
Режимы разделения (еще раз) 163
Заключение 165

Глава 17. Границы: проведение разделяющих линий . . . . . . . . . . . . . . 166
Пара печальных историй 167
FitNesse 170
Какие границы проводить и когда? 172
О вводе и выводе 175
Архитектура с плагинами 176
Аргумент в пользу плагинов 177
Заключение 178

Глава 18. Анатомия границ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179
Пересечение границ 180
Ужасный монолит 180
Компоненты развертывания 182
Потоки выполнения 183
Локальные процессы 183
Службы 184
Заключение 185

Глава 19. Политика и уровень . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 186
Уровень 187
Заключение 190

Глава 20. Бизнес-правила . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191
Сущности 192
Варианты использования 193
Модели запросов и ответов 195
Заключение 196

Глава 21. Кричащая архитектура . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197
Тема архитектуры 198
Цель архитектуры 199
А что насчет Веб? 199
Фреймворки — это инструменты, а не образ жизни 200
Тестируемые архитектуры 200
Заключение 201

Глава 22. Чистая архитектура . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202
Правило зависимостей 204
Типичный сценарий 208
Заключение 209

Глава 23. Презентаторы и скромные объекты . . . . . . . . . . . . . . . . . . . 210
Шаблон «Скромный объект» 211
Презентаторы и представления 211
Тестирование и архитектура 212
Шлюзы к базам данных 212
Преобразователи данных 213
Службы 214
Заключение 214

Глава 24. Неполные границы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215
Пропустить последний шаг 216
Одномерные границы 217
Фасады 217
Заключение 218

Глава 25. Уровни и границы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219
Охота на Вампуса 220
Чистая архитектура? 221
Пересечение потоков 224
Разбиение потоков 224
Заключение 226

Глава 26. Главный компонент . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 228
Конечная деталь 229
Заключение 232

Глава 27. Службы: большие и малые . . . . . . . . . . . . . . . . . . . . . . . . . . . 233
Сервисная архитектура? 234
Преимущества служб? 234
Проблема с животными 236
Спасение в объектах 238
Службы на основе компонентов 239
Сквозные задачи 240
Заключение 241

Глава 28. Границы тестов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242
Тесты как компоненты системы 243
Проектирование для простоты тестирования 244
Программный интерфейс для тестирования 245
Безопасность 245
Заключение 246


Глава 29. Чистая встраиваемая архитектура . . . . . . . . . . . . . . . . . . . . 247
Тест на профпригодность 250
Привязка к оборудованию — узкое место 253
Заключение 264

Часть VI. Детали . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 265

Глава 30. База данных — это деталь . . . . . . . . . . . . . . . . . . . . . . . . . . . . 266
Реляционные базы данных 267
Почему системы баз данных настолько распространены? 268
Сохранятся ли диски? 269
Детали 270
А производительность? 270
История 270
Заключение 272

Глава 31. Веб — это деталь . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 273
Бесконечный маятник 274
Вывод 276
Заключение 277

Глава 32. Фреймворки — это деталь . . . . . . . . . . . . . . . . . . . . . . . . . . . 278
Авторы фреймворков 279
Неравный брак 279
Риски 280
Решение 280
Объявляю вас 281
Заключение 281

Глава 33. Практический пример: продажа видео . . . . . . . . . . . . . . . . . 282
Продукт 283
Анализ вариантов использования 283
Компонентная архитектура 285
Управление зависимостями 286
Заключение 287

Глава 34. Недостающая глава . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 288
Упаковка по уровням 289
Упаковка по особенностям 290
Порты и адаптеры 291
Упаковка по компонентам 293
Дьявол в деталях реализации 298
Организация и инкапсуляция 299
Другие режимы разделения 302
Заключение: недостающий совет 304

Часть VII. Приложение 305

Архитектурная археология . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 306
Профсоюзная система учета 307
Laser Trim 314
Контроль алюминиевого литья под давлением 318
4-TEL 319
Компьютер зоны обслуживания 324
Язык C 328
BOSS 330
pCCU 331
DLU/DRU 333
VRS 335
Электронный секретарь 338
Система командирования ремонтников 340
ROSE 346
Регистрационные экзамены для архитекторов 348
Заключение 351