Дата-ориентированное программирование, Шарвит Й., 2024.
Книга посвящена парадигме DОР (дата-ориентированному программированию), являющейся расширением философии объектно-ориентированного программирования. Предлагается новый взгляд на формирование структур данных и операции над ними в высоконагруженных приложениях. Изложенный материал дает решения сложных проблем, возникающих при управлении состоянием, разделяемыми и распределенными данными, позволяет безопасно организовать параллелизм и конкурентность, а также адаптировать ключевые принципы объектно-ориентированного программирования (полиморфизм, композицию, наследование) к новым задачам, связанным с обработкой больших данных.

Гибкость.
Утро понедельника. Теодор сидит е Нэнси па террасе La Vila е Bella, итальянской кофейни рядом с зоопарком Сан-Франциско. Нэнси — предпринимательница, которая ищет агентство по развитию для своей стартап-компании Klafim. Тео работает в агентстве по разработке программного обеспечения Albatross, которое стремится вернуть доверие стартапов.
Нэнси и ее партнер по бизнесу собрали начальный капитал для Klafim, социальной сети для книг. Уникальное ценностное предложение Klafim заключается в объединении онлайн-мира с физическим миром, позволяя пользователям брать книги из местных библиотек, а затем встречаться онлайн для обсуждения книг. Большая часть продукта основана на интеграции существующих онлайн-сервисов. Единственное, что требует разработки программного обеспечения, — это то, что Нэнси называет глобальной системой управления библиотеками. Их беседу на мгновение прерывает официант, который приносит Тео его крепкий эспрессо, а Нэнси американо с молоком.
ОГЛАВЛЕНИЕ.
Вступительное слово.
Введение.
Благодарности.
Об этой книге.
Кто должен прочитать эту книгу?.
Как организована эта книга: дорожная карта.
О коде.
Дискуссионный форум liveBook.
Об авторе.
Об иллюстрации на обложке.
Персонажи пьесы.
ЧАСТЬ 1. ГИБКОСТЬ.
Глава 1. Сложность объектно-ориентированного программирования.
1.1. Дизайн ООП: классический или традиционный?.
1.1.1. Этап проектирования.
1.1.2. UML 101.
1.1.3. Объяснение каждой части диаграммы классов.
Класс Library.
Классы Librarian, Member и User.
Класс Catalog.
Класс Book.
Класс BookItem.
1.1.4. Этап реализации.
1.2. Источники сложности.
1.2.1. Множество отношений между классами.
1.2.2. Непредсказуемое поведение кода.
1.2.3. Нетривиальная сериализация данных.
1.2.4. Сложные иерархии классов.
Итоги.
Глава 2. Разделение кода и данных.
2.1. Две части системы ДОП.
2.2. Объекты данных.
2.3. Модули кода.
2.4. Системы ДОП просты для понимания.
2.5. Системы ДОП являются гибкими.
Итоги.
Глава 3. Основные манипуляции с данными.
3.1. Разработка модели данных.
3.2. Представление записей в виде карт.
3.3. Манипулирование данными с помощью универсальных функций.
3.4. Вычисление результатов поиска.
3.5. Обработка записей различных типов.
Итоги.
Глава 4. Управление состоянием.
4.1. Несколько версий системных данных.
4.2. Структурное совместное использование.
4.3. Реализация структурного совместного использования.
4.4. Безопасность данных.
4.5. Фиксационный этап изменения.
4.6. Обеспечение целостности состояния системы.
4.7. Восстановление предыдущих состояний.
Итоги.
Глава 5. Основы контроля конкурентности.
5.1. Оптимистичный контроль конкурентности.
5.2. Согласование между конкурентными изменениями.
5.3. Сокращение коллекций.
5.4. Структурная разница.
5.5. Имплементация алгоритма согласования.
Итоги.
Глава 6. Модульные тесты.
6.1. Простота дата-ориентированных тестовых кейсов.
6.2. Модульные тесты для кода манипулирования данными.
6.2.1. Дерево вызовов функций.
6.2.2. Модульные тесты для функций вниз по дереву.
6.2.3. Модульные тесты для узлов в дереве.
6.3. Модульные тесты для запросов.
6.4. Модульные мутационные тесты.
Движение вперед.
Итоги.
ЧАСТЬ 2. МАСШТАБИРУЕМОСТЬ.
Глава 7. Основы валидации данных.
7.1. Валидация данных в ДОП.
7.2. Суть JSON-схемы.
7.3. Гибкость и строгость схемы.
7.4. Композиция схемы.
7.5. Сведения о сбоях при валидации данных.
Итоги.
Глава 8. Расширенный контроль конкурентности.
8.1. Сложность блокировок.
8.2. Потокобезопасный счетчик с атомами.
8.3. Потокобезопасный кеш с атомами.
8.4. Управление состоянием с помощью атомов.
Итоги.
Глава 9. Персистентные структуры данных.
9.1. Потребность в персистентных структурах данных.
9.2. Эффективность персистентных структур данных.
9.3. Библиотеки персистентных структур данных.
9.3.1. Персистентные структуры данных в Java.
9.3.2. Персистентные структуры данных в JavaScript.
9.4. Персистентные структуры данных в действии.
9.4.1. Написание запросов с персистентными структурами данных.
9.4.2. Операции изменения при работе с персистентными структурами данных.
9.4.3. Сериализация и десериализация.
9.4.4. Структурная разница.
Итоги.
Глава 10. Операции с базой данных.
10.1. Извлечение данных из базы данных.
10.2. Хранение данных в базе данных.
10.3. Простая манипуляция данными.
10.4. Продвинутая обработка данных.
Итоги.
Глава 11. Веб-сервисы.
11.1. Другой запрос функции.
11.2. Создание внутренностей, подобных внешностям.
11.3. Представление запроса клиента в виде карты.
11.4. Представление ответа сервера в виде карты.
11.5. Дальнейшая передача информации.
11.6. Расширение результатов поиска в действии.
11.7. Доставка в срок.
Итоги.
ЧАСТЬ 3. УДОБСТВО СОПРОВОЖДЕНИЯ.
Глава 12. Расширенная проверка данных.
12.1. Проверка аргументов функции.
12.2. Проверка возвращаемого значения.
12.3. Расширенная проверка данных.
12.4. Автоматическое создание диаграмм модели данных.
12.5. Автоматическая генерация модульных тестов на основе схемы.
12.6. Новый подарок.
Итоги.
Глава 13. Полиморфизм.
13.1. Сущность полиморфизма.
13.2. Мультиметоды с единичной отправкой.
13.3. Мультиметоды с множественной отправкой.
13.4. Мультиметоды с динамической отправкой.
13.5. Интеграция мультиметодов: производство.
Итоги.
Глава 14. Расширенная обработка данных.
14.1. Обновление значения на карте с помощью выразительности.
14.2. Манипулирование вложенными данными.
14.3. Использование наилучшего инструмента для работы.
14.4. Легкое разматывание.
Итоги.
Глава 15. Отладка.
15.1. Детерминизм в программировании.
15.2. Репродуцируемость с числами и строками.
15.3. Репродуцируемость с любыми данными.
15.4. Модульные тесты.
15.5. Работа с внешними источниками данных.
Прощание.
Итоги.
Приложение A. Принципы дата-ориентированного программирования.
A.1. Принцип №1: отделяйте код от данных.
A.1.1. Иллюстрация к принципу №1.
Нарушение принципа №1 в ООП.
Нарушение принципа №1 в ФП.
Соблюдение принципа №1 в ООП.
Соблюдение принципа №1 в ФП.
A.1.2. Преимущества принципа №1.
Преимущество №1: код может быть повторно использован в различных контекстах.
Преимущество №2: код может быть протестирован изолированно.
Преимущество №3: системы, как правило, менее сложны.
A.1.3. Издержки принципа №1.
Издержка №1: отсутствие контроля над тем, какой код к каким данным может получить доступ.
Издержка №2: отсутствие пакетирования.
Издержка №3: системы состоят из большего количества объектов.
A.1.4. Основная суть принципа №1.
A.2. Принцип №2: представляйте данные с помощью обобщенных структур.
A.2.1. Иллюстрация к принципу №2.
A.2.2. Преимущества принципа №2.
Применение функций, которые не ограничены определенным случаем использования.
Гибкая модель данных.
A.2.3. Издержки принципа №2.
Издержка №1: снижение производительности.
Издержка №2: отсутствие схемы данных.
Издержка №3: отсутствует проверка данных на валидность во время компиляции.
Издержка №4: необходимость явного приведения типов.
A.2.4. Основная суть принципа №2.
A.3. Принцип №3: данные неизменяемы.
A.3.1. Иллюстрация к принципу №3.
A.3.2. Преимущества принципа №3.
Преимущество №1: надежный доступ к данным для всех.
Преимущество №2: предсказуемое поведение кода.
Преимущество №3: быстрая проверка равенства.
Преимущество №4: безопасность конкурентности без затрат.
A.3.3. Издержки принципа №3.
Издержка №1: снижается производительность.
Издержка №2: требуется библиотека для персистентных структур данных.
A.3.4. Основная суть принципа №3.
A.4. Принцип №4: отделяйте схему данных от представления данных.
A.4.1. Иллюстрация к принципу №4.
A.4.2. Преимущества принципа №4.
Преимущество №1: возможность свободно выбирать, какие данные следует валидировать.
Преимущество №2: наличие опциональных полей.
Преимущество №3: наличие расширенных условий валидации данных.
Преимущество №4: возможность автоматического создания визуализации модели данных.
A.4.3. Издержки принципа №4.
Издержка №1: слабая связь между данными и их схемой.
Издержка №2: небольшое снижение производительности.
A.4.4. Основная суть принципа №4.
Заключение.
Приложение B. Обобщенный доступ к данным в статически типизированных языках.
B.1. Динамические геттеры для строковых карт.
B.1.1. Доступ к невложенным полям карты с помощью динамических геттеров.
B.1.2. Доступ к вложенным полям карты с помощью динамических геттеров.
B.2. Геттеры значений для карт.
B.2.1. Доступ к невложенным полям карты с помощью геттеров значений.
B.2.2. Доступ к вложенным полям карты с помощью геттеров значений.
B.3. Типизированные геттеры для карт.
B.3.1. Доступ к невложенным полям карты с помощью типизированных геттеров.
B.3.2. Доступ к вложенным полям карты с помощью типизированных геттеров.
B.4. Обобщенный доступ к членам класса.
B.4.1. Обобщенный доступ к не вложенным членам класса.
B.4.2. Обобщенный доступ к членам вложенного класса.
B.4.3. Автоматическая сериализация объектов JSON.
Итоги.
Приложение C. Дата-ориентированное программирование: звено в цепи парадигм программирования.
C.1. Хронология.
C.1.1. 1958 год: Lisp.
C.1.2. 1981 год: значения и объекты.
C.1.3. 2000 год: идеальные хеш-деревья.
C.1.4. 2006 год: «Из ямы со смолой».
C.1.5. 2007 год: Clojure.
C.1.6. 2009 год: неизменяемость для всех.
C.2. Принципы ДОП как наилучший подход.
C.2.1. Принцип №1: отделяйте код от данных.
C.2.2. Принцип №2: представляйте данные с помощью обобщенных структур.
C.2.3. Принцип №3: данные неизменяемы.
C.2.4. Принцип №4: отделяйте схему данных от представления данных.
C.3. ДОП и другие парадигмы, связанные с данными.
C.3.1. Дата-ориентированная разработка.
C.3.2. Дата-управляемое программирование.
C.3.3. Дата-ориентированное программирование (ДОП).
Итоги.
Приложение D. Ссылки на Lodash.
Купить .
Купить .
Теги: учебник по программированию :: программирование :: Шарвит








