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