Фундамент архітектури

Фундамент архітектури

Сергій Немчинський
This is a sample of the book's content.Buy on Leanpub

Table of Contents

Фундамент архітектури

  • Передмова: Чому ця книга існує і як її читати
    • Біль №1: Знання у вакуумі
    • Біль №2: Застаріле лайно мамонта
    • Біль №3: Сліпа віра у ШІ
    • Для кого ця книга
    • Як ми будемо вчитися: Problem-First
    • Структура: Куди ми йдемо
    • Подяка Early Access читачам
    • 🔑 Висновки розділу
  • Частина I. Фундамент та Філософія
  • Розділ 1. Еволюція болю: Від GOTO до ООП
    • Ера Хаосу: Spaghetti Code та GOTO (1960-ті)
    • Ера Структурного програмування та його “Спадщина” (1970-ті)
    • Ера Процедурного Пекла: Глобальні дані (1980-ті)
    • Народження ООП: Клітини і Повідомлення
    • Від цегли до байтів: Історія патернів (1977-1994)
    • Протверезіння: GRASP і SOLID
    • Велика Картина (The Big Picture)
    • А як щодо Функціонального програмування?
    • Сучасність: Як виглядають патерни зараз?
    • 🔑 Висновки розділу
  • Розділ 2. За що вам платять гроші? Архітектурні драйвери та мистецтво Trade-offs
    • ЩО проти ЯК: Функціональні та Нефункціональні вимоги
    • Сучасна шістка драйверів
    • Три вершники складності
    • Мистецтво компромісу (Trade-offs)
    • 🔑 Висновки розділу
  • Розділ 3. Парадокс ООП: Ви думаєте, що знаєте, — але ні
    • Що таке парадигма?
    • Швидкий огляд «сусідів» ООП
    • Алан Кей та Біологічна метафора
    • Messaging: Прохання замість Наказу
    • Стан + Поведінка = Нероздільна Єдність
    • Велика картина: де ми?
    • 🔑 Висновки розділу
  • Розділ 4. Інкапсуляція: Два обличчя “чорної скриньки”
    • Велика ілюзія безпеки
    • Дві трактовки: Від Сімули до Вікіпедії
    • Інкапсуляція як архітектурний принцип
    • Навіщо це треба: Гайка, Жопа та Race Conditions
    • Рішення: Справжній ООП-об’єкт
    • 🔑 Висновки розділу
  • Розділ 5. Наслідування: коли світ б’є вас по потилиці
    • Чому наслідування взагалі існує?
    • Золоте правило: IS-A
    • Реальний кейс: Медогляд і Квіти
    • Множинне наслідування та Diamond Problem
    • Правила виживання: скільки рівнів — норма?
    • 🔑 Висновки розділу
  • Розділ 6. Поліморфізм: вбивця if-else та справжнє серце ООП
    • Два типи поліморфізму: справжній і «цукровий»
    • Еволюція болю: від «Бібліотеки» до «Дерева смерті»
    • Рішення: Плагінна архітектура
    • Duck Typing: поліморфізм без ієрархії
    • Антипатерн: об’єкт без поведінки вбиває поліморфізм
    • 🔑 Висновки розділу
  • Розділ 7. Абстракція: мистецтво ігнорувати деталі
    • Що таке аналіз насправді?
    • Абстракція є у всіх парадигмах
    • Три принципи — один результат
    • Антипатерн: занадто абстрактно
    • Реальна історія: коли дизайн занадто точний
    • Золоте правило: інтерфейс — завжди, балаган — ніколи
    • 🔑 Висновки розділу та підсумок ООП-модуля
  • Розділ 8. UML: Навіщо малювати, якщо можна кодити?
    • Як ми домовилися про мову
    • Міф про «Магічну кнопку» та Rational Rose
    • «Як роблять джуни» або Кнопка Зла
    • Суть підходу: UML як «Детектор Гівнокоду»
    • Тонкощі та Trade-offs: Інструменти і Пастка коду
    • Чому ми беремо тільки дві діаграми з усіх можливих
    • 🔑 Висновки розділу
  • Розділ 9. Анатомія класу та битва стрілок: Class Diagram
    • Анатомія “Квадратика”
    • Залежності: Хто кого смикає
    • Битва Ромбиків: Агрегація vs Композиція
    • Мультиплікатори: Скільки вішати в грамах?
    • Генералізація і Чупа-чупси
    • Нотатки (стикери) та Dependency Injection
    • 🔑 Висновки розділу
  • Розділ 10. Життя об’єктів у рантаймі: Sequence Diagram
    • Коли статика бреше
    • Анатомія Sequence Diagram
    • «Як роблять джуни»: Антипатерни зайвої деталізації
    • Рішення: Хірургічний інструмент, а не малярний валик
    • Гранд-фінал: Навіщо взагалі вчити UML у 2026 році?
    • 🔑 Висновки розділу
  • Частина II. GRASP: Мистецтво розподілу відповідальності
  • Розділ 11. Вступ до GRASP та патерн Information Expert
    • Що таке GRASP загалом?
    • Анатомія об’єкта: Стан та Поведінка
    • Шлях Експерта на прикладі чека
    • Коли Експерт стає Монстром: Анемічна модель і кейс DirecTV
    • Модерн-процедуралізм та Smart Data
    • 🔑 Висновки розділу
  • Розділ 12. Creator (Творець): Хто дає життя об’єктам?
    • Процедурна помилка початківців
    • Правила Лармана: Хто має “ліцензію” на new?
    • Велика битва: Creator проти Dependency Injection
    • Конфлікт GRASP та SOLID: Жорстока реальність
    • Еволюція складності: “Гітарний ефект”
    • 🔑 Висновки розділу
  • Розділ 13. Controller (Контролер): Перша лінія оборони
    • Що таке System Event (Системна подія)?
    • Ізоляція багатопоточності: “Хвилеріз”
    • Антипатерн: Роздутий контролер (Bloated Controller)
    • Два різновиди контролерів (Facade vs Use-Case)
    • 🔑 Висновки розділу
  • Розділ 14. Low Coupling та High Cohesion: Інь і Янь архітектури
    • Low Coupling: Ефект Метелика та “Монолітність”
    • High Cohesion: Смітник чи Інструмент?
    • Доводимо ідеал до абсурду
    • Кейс YouTube: Коли реальність б’є теорію
    • Місток до майбутнього: GRASP проти SOLID
    • 🔑 Висновки розділу
  • Розділ 15. Polymorphism: Вбивця IF/ELSE
    • Вступна проблема: Життя на сходинках
    • “Як роблять джуни”: Жах видалення
    • Рішення: Поліморфізм як архітектурний патерн
    • Коли “паттернізм головного мозку” вбиває проєкти
    • 🔑 Висновки розділу
  • Розділ 16. Pure Fabrication: Чиста Вигадка (або чому в реальному світі немає Менеджерів і Хелперів)
    • Конфлікт ООП та Реальності
    • Компроміс заради метрик: Суть патерну
    • “Як роблять джуни”: Темний бік вигадок (Utils та Helpers)
    • Лікування хелперів
    • Резюме
    • 🔑 Висновки розділу
  • Розділ 17. Indirection: Посередник, що Розв’язує Руки (або чому один інтерфейс дорівнює нулю копіпасту)
    • Вступна проблема: Вася, Маша і Вічний Баг
    • Рішення: Посередник між двома класами
    • Термінологічне Пекло: Indirection, DIP, IoC та DI
    • Суперсила: Interception (Перехоплення)
    • Тонкощі та Trade-offs: Коли вводити інтерфейси?
    • Резюме
    • 🔑 Висновки розділу
  • Розділ 18. Protected Variations: Як Локалізувати Вибух (або стратегія виживання у світі, де ТЗ змінюється щодня)
    • Неминучість Змін та Одна Неприємна Правда
    • Механіка: Два Кроки до Виживання
    • Axis of Change — Поняття, Яке Буде Переслідувати Вас до Кінця Книги
    • Protected Variations і OCP — Батько і Син
    • Антипатерн: Не Будьте Вангою
    • Резюме та Прощання з GRASP
    • 🔑 Висновки розділу
  • Частина III. SOLID: Принципи гнучкості
  • Розділ 19. Вступ до SOLID та Принцип SRP (Або чому програми гниють і як знайти Вісь Змін)
    • «Як роблять джуни»: Міф про «одну дію»
    • Рішення: Осі змін та Актори
    • Прагматизм: Коли ми свідомо порушуємо SRP
    • 🔑 Висновки розділу
  • Розділ 20. OCP: Відкриті для розширення, закриті для змін (або як додавати фічі, не ламаючи старий код)
    • «Як роблять джуни»: Антипатерн Хардкодингу
    • Рішення: Два шляхи OCP
    • Тонкощі та Trade-offs: Пастка Soft-coding
    • Прагматизм: Коли правила ламаються
    • 🔑 Висновки розділу
  • Розділ 21. LSP: Принцип підстановки Лісков (або чому компілятор вас не врятує)
    • Синдром Миколи: Коли формальність вбиває логіку
    • Design by Contract (Проєктування за контрактом)
    • Математика проти ООП: Проблема Квадрата і Прямокутника
    • Як виявити архітектурний «бруд» (порушення LSP)
    • LSP і Duck Typing: «Якщо це качка — то і плавати теж зобов’язана»
    • 🔑 Висновки розділу
  • Розділ 22. ISP: Інтерфейс належить клієнту (або чому оператору не можна давати «червону кнопку»)
    • Чому нас вчили зводити все в один «універсальний» інтерфейс
    • «Дедлайн на вчора» і кнопка Extract Interface
    • Різати, не чекаючи перитоніту: рольові інтерфейси
    • Коли ISP виходить за межі коду: REST і мобільна розробка
    • ISP і качина типізація: навіть качці не завжди потрібні всі її функції
    • ISP головного мозку (коли доводять до абсурду)
    • ISP і SRP: два брати-акробати
    • Місток до DIP
    • 🔑 Висновки розділу
  • Розділ 23. DIP: Бізнес не повинен знати про MySQL
    • Коли бізнес-логіка напряму залежить від MySQL
    • Що реально означає Dependency Inversion Principle
    • Бізнес визначає контракт, а не інфраструктура
    • Адаптери інфраструктури: деталі, які можна міняти
    • Чому з DIP тести стають коротшими і дешевшими
    • Де не треба вигадувати зайві інтерфейси
    • Коротко про шари, щоб ми говорили однією мовою
    • Як DIP зв’язується з GRASP-принципами
    • 🔑 Висновки розділу
  • Частина IV. Патерни GoF (Банда Чотирьох) у сучасному світі
  • Розділ 24. Вступ до GoF: Патерни як інструменти, а не релігія
    • Чому ми прийшли до GoF лише тепер
    • Патерни 1994 року у реаліях 2026
    • Як пройти всі 23 патерни без втрати практичності
    • Де DI-контейнер закриває питання, а де — ні
    • Rule of Three: коли патерн справді потрібен
    • Класифікація GoF без фанатизму
    • Що далі: Singleton
    • 🔑 Висновки розділу
  • Розділ 25. Singleton (Одинак): Чому глобальний стан вбиває ваші тести
    • Класична реалізація та багатопотоковий жах
    • Ілюзія безпеки: пастка Double-Checked Locking
    • Чому класичний Singleton — це Антипатерн?
    • Сучасне рішення: DI-контейнер як «Великий Сінглтон»
    • Специфіка PHP: Сінглтон живе одне життя (запит)
    • Специфіка Node.js та Python: безкоштовні сінглтони
    • Мовні «чіт-коди»: Kotlin, Go, Ruby та Rust
    • Патерн Monostate (коли об’єктів багато, а стан один)
    • Патерн Multiton (коли одного об’єкта замало)
    • Singleton і Функціональне програмування (FP)
    • А якщо у мене немає DI-контейнера? (Pure DI)
    • Що далі: перехід до фабрик
    • 🔑 Висновки розділу
  • Розділ 26. Factory Method та Abstract Factory: Як створювати об’єкти без архітектурного самогубства
    • Проблема, яку вирішують фабрики
    • Класичний GoF Factory Method: учбова схема, яку в продакшені фактично не пишуть
    • Робочий варіант №1: Simple Factory
    • Робочий варіант №2: Static Factory Method у самому класі
    • 2026 рік: DI-контейнери вже працюють фабрикою для Injectables
    • Лямбди як фабрики: менше бойлерплейту
    • Коли який варіант брати
    • Динамічна типізація: фабрики без класів
    • Як не влетіти в overengineering
    • Музейна хвилинка: Abstract Factory
    • Що далі: Prototype та Object Pool
    • 🔑 Висновки розділу
  • Розділ 27. Prototype та Object Pool: Клони атакують і коробка з інструментами
    • Як роблять джуни: Антипатерн “Кілометри сеттерів”
    • Патерн Prototype: Клонування замість конструювання
    • Диявол у деталях: Поверхневе vs Глибоке копіювання
    • Патерн Object Pool: Коробка з інструментами
    • 🔑 Висновки розділу
  • Розділ 28. Builder: Порятунок від конструкторів-монстрів
    • Як це описано в GoF (і чому це мертво)
    • Як це роблять нормальні люди (Fluent Builder)
    • Мовні реалії 2026 року
    • Коли все ж виносити Builder в окремий клас?
    • Builder + Factory Method: Ідеальний симбіоз
    • 🔑 Висновки розділу
Фундамент архітектури/Частина IV. Патерни GoF (Банда Чотирьох) у сучасному світі

Частина IV. Патерни GoF (Банда Чотирьох) у сучасному світі

https://leanpub.com/architecture-foundation

Up next

Розділ 24. Вступ до GoF: Патерни як інструменти, а не релігія

In this chapter

  • Частина IV. Патерни GoF (Банда Чотирьох) у сучасному світі