Пора по-новому взглянуть на постулаты, остававшиеся неизменными на протяжении многих лет. Динамично меняющийся мир диктует свои правила, в том числе и в компьютерной архитектуре. Происходящие изменения требуют новых подходов, заставляют жесткие системы становиться гибкими и подстраиваться под новые условия. Возможно ли долгосрочное планирование, если все непрерывно меняется? Как предотвратить постепенное ухудшение архитектурного решения с течением времени? Здесь вы найдете ответы и рекомендации, которые позволят защитить самые важные характеристики проекта в условиях непрерывных изменений.
Author(s): Нил Форд, Ребекка Парсонс, Патрик Куа
Series: Бестселлеры O’Reilly
Edition: 1
Publisher: Питер
Year: 2019
Language: English
Commentary: Vector PDF
Pages: 272
City: СПб.
Tags: Software Engineering; Best Practices; Software Architecture
Оглавление
Предисловие
Введение
Типографские соглашения
От научного редактора перевода
Как связаться с нами
Дополнительная информация
От издательства
Благодарности
Глава 1. Архитектура программного обеспечения
Архитектура с эволюционным развитием
Как можно осуществлять долгосрочное планирование если все постоянно меняется?
Как можно защитить созданную архитектуру от постепенной деградации?
Инкрементные изменения
Управляемое изменение
Многочисленные области архитектуры
Закон Конвея
Почему эволюционное развитие?
Краткие выводы
Глава 2. Функции пригодности
Что собой представляет функция пригодности?
Категории
Атомарная и комплексная функции
Триггерные и непрерывные функции
Статические и динамические функции
Автоматизированная и ручная функции
Временная функция
Функция с преднамеренным развитием
Предметноориентированная функция
Ранняя идентификация функций пригодности
Пересмотр функций пригодности
Глава 3. Проектирование инкрементных изменений
Строительные блоки
Тестопригодность
Конвейеры развертывания
Комбинирование категорий функций пригодности
Практический пример: реструктуризация архитектуры при ее развертывании 60 раз в день
Конфликтующие цели
Практический пример: добавление функций пригодности в сервис выставления счетов PenultimateWidgets
Разработка основанная на гипотезах и на данных
Практический пример: что портировать?
Глава 4. Архитектурная связанность
Модульность
Квант и гранулярность архитектуры
Эволюция архитектурных стилей
Большой комок грязи
Монолитная архитектура
Событийноориентированная архитектура
Сервисориентированные архитектуры
Бессерверная архитектура
Контроль размера кванта
Практический пример: предотвращение циклов компонентов
Глава 5. Эволюционирующие данные
Эволюционное проектирование баз данных
Эволюционные схемы
Интеграция базы данных общего использования
Ненадлежащая связанность данных
Двухфазная фиксация транзакций
Возраст и качество данных
Практический пример: эволюционирование методов маршрутизации в PenultimateWidgets
Глава 6. Построение архитектуры с эволюционным развитием
Техники
1. Определить области затрагиваемые эволюционным развитием
2. Определить для каждой области функцию(и) пригодности
3. Использовать конвейер развертывания для автоматизации функций пригодности
Проекты с нуля
Настройка существующих архитектур
Надлежащие связанность и сцепление
Практики проектирования
Функции пригодности
Применение коммерческой продукции
Миграция архитектур
Шаги миграции
Эволюция модульных взаимодействий
Инструкции для построения эволюционирующей архитектуры
Удаление ненужной изменчивости
Сделайте решения обратимыми
Предпочтение следует отдавать эволюционированию а не предсказуемости
Построение уровня защиты от повреждений
Практический пример: шаблоны сервисов
Построение жертвенной архитектуры
Уменьшить внешние изменения
Обновление библиотек и фреймворков
Отдавайте предпочтение непрерывной поставке а не снимкам состояния системы
Версии внутренних сервисов
Практический пример: эволюционирование рейтингов PenultimateWidgets
Глава 7. Архитектура с эволюционным развитием: ловушки и антипаттерны
Техническая архитектура
Антипаттерн: Vendor King
Ловушка: дырявая абстракция
Антипаттерн: ловушка на последних 10 %
Антипаттерн: неправильное повторное использование кода
Практический пример: принцип повторного использования в PenultimateWidgets
Ловушка: разработки ради резюме
Инкрементные изменения
Антипаттерн: ненадлежащее управление
Практический пример: модель управления «золотой середины» в PenultimateWidgets
Ловушка: недостаточная скорость для релиза
Проблемы бизнеса
Ловушка: адаптация продукта
Антипаттерн: составление отчетов
Ловушка: горизонты планирования
Глава 8. Внедрение эволюционной архитектуры
Организационные факторы
Кроссфункциональные команды
Организованные бизнесвозможности
Продукт важнее чем проект
Работа с внешним изменением
Связи между участниками команды
Характеристики связей между командами
Культура
Культура эксперимента
Операционный денежный поток (OCF) и бюджетирование
Разработка функций пригодности для предприятия
Практический пример: PenultimateWidgets как платформа
С чего мы начнем?
Низко висящие фрукты
Максимальная ценность
Тестирование
Инфраструктура
Практический пример: архитектура предприятия в компании PenultimateWidgets
Будущее состояние?
Функции пригодности использующие искусственный интеллект
Генеративное тестирование
Зачем это (или почему бы и нет)?
Зачем та или иная компания решает строить эволюционирующую архитектуру?
Практический пример: избирательный масштаб в PenultimateWidgets
По какой причине компания делает выбор не строить эволюционирующую архитектуру?
Убеждая других
Практический пример: консультация по системе дзюдо
Пример из бизнеса
«Будущее уже наступило…»
Двигаться быстро и без аварий
Меньше риска
Новые возможности
Построение архитектуры с эволюционным развитием
Об авторах
Выходные данные