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