From 1a3264825ce50c8ed993b599e4777f4d81b549b7 Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Mon, 15 Jul 2024 20:24:29 -0400 Subject: [PATCH 01/25] Update README.md --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 5f0f19f..304c4fa 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,8 @@ -# 🧩 Patterns for JavaScript & Node.js +# 🧩 Шаблони для JavaScript та Node.js -> Rethinking GRASP (General Responsibility Assignment Software Patterns), SOLID (Single responsibility, Open–closed, Liskov substitution, Interface segregation, Dependency inversion), GoF (Gang of Four) patterns, for Frontend (browsers) & Backend (node.js, other runtimes) development with JavaScript and TypeScript +> Переосмислення шаблонів GRASP (розподілу обов’язків - General Responsibility Assignment Software Patterns), SOLID (єдина відповідальність, відкритий–закритий, підстановка Лісков, розподілення інтерфейсів, інверсія залежностей), шаблони GoF (Банда чотирьох) для фронтенду (браузери) і бекенду (node.js, інші рантайми) розробки на JavaScript і TypeScript -Translations: +Переклади: [EN](https://github.com/tshemsedinov/Patterns-JavaScript/tree/en), [UA](https://github.com/tshemsedinov/Patterns-JavaScript/tree/ua), [RU](https://github.com/tshemsedinov/Patterns-JavaScript/tree/ru). From f96ebe70b78f91cad11d8e5ab81af83fac2cd0b8 Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Mon, 15 Jul 2024 21:36:49 -0400 Subject: [PATCH 02/25] Index and links --- README.md | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) diff --git a/README.md b/README.md index 304c4fa..ed74630 100644 --- a/README.md +++ b/README.md @@ -6,3 +6,52 @@ [EN](https://github.com/tshemsedinov/Patterns-JavaScript/tree/en), [UA](https://github.com/tshemsedinov/Patterns-JavaScript/tree/ua), [RU](https://github.com/tshemsedinov/Patterns-JavaScript/tree/ru). + +- Шаблони (патерни чи принципи) GRASP + - Інформаційний експерт (Information expert) + - Утворювач (Creator) + - Контролер (Controller) + - Ненаправленість (Indirection) + - Низьке зчеплення (Low coupling) + - Висока згуртованість (High cohesion) + - Поліморфізм (Polymorphism) + - Захищені варіації (Protected variations) + - Pure fabrication (Чиста вигадка) +- Шаблони (патерни чи принципи) SOLID + - Single responsibility principle + - Open/closed principle + - Liskov substitution principle + - Interface segregation principle + - Dependency inversion principle +- Патерни GoF + - Шаблони, що породжують + - Абстрактна фабрика (Abstract factory) + - [Будівельник (Builder)](https://github.com/HowProgrammingWorks/Builder) + - [Фабричний метод (Factory method)](https://github.com/HowProgrammingWorks/Factory) + - [Прототип (Prototype)](https://github.com/HowProgrammingWorks/Prototype) + - [Одинак (Singleton)](https://github.com/HowProgrammingWorks/Singleton) + - Структурні шаблони + - [Адаптер (Adapter)](https://github.com/HowProgrammingWorks/Adapter) + - [Міст (Bridge)](https://github.com/HowProgrammingWorks/Bridge) + - [Компонувальник (Composite)](https://github.com/HowProgrammingWorks/Composite) + - Декоратор (Decorator) + - [Фасад (Facade)](https://github.com/HowProgrammingWorks/Facade) + - Легковаговик (Flyweight) + - [Проксі (Proxy)](https://github.com/HowProgrammingWorks/Proxy) + - Шаблони поведінки + - Ланцюжок обов'язків (Chain of responsibility) + - [Chain of responsibility](https://github.com/HowProgrammingWorks/ChainOfResponsibility) + - Middleware + - [Команда (Command)](https://github.com/HowProgrammingWorks/Command) + - Інтерпретатор (Interpreter) + - [Ітератор (Iterator)](https://github.com/HowProgrammingWorks/Iterator) + - Посредник (Mediator) + - Знімок (Memento) + - Спостерігач (Observable та Observer, EventEmitter, EventTarget) + - [EventTarget and EventEmitter](https://github.com/HowProgrammingWorks/Events) + - [EventEmitter](https://github.com/HowProgrammingWorks/EventEmitter) + - [Спостерігач (Observer)](https://github.com/HowProgrammingWorks/Observer) + - Стан (State) + - [Стратегія (Strategy)](https://github.com/HowProgrammingWorks/Strategy) + - Шаблонний метод (Template method) + - Відвідувач (Visitor) From 51970b88733480bef4117580a25f58475ff4f06d Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Mon, 15 Jul 2024 21:47:49 -0400 Subject: [PATCH 03/25] Fix translation --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index ed74630..c4f180a 100644 --- a/README.md +++ b/README.md @@ -16,7 +16,7 @@ - Висока згуртованість (High cohesion) - Поліморфізм (Polymorphism) - Захищені варіації (Protected variations) - - Pure fabrication (Чиста вигадка) + - Чиста вигадка (Pure fabrication) - Шаблони (патерни чи принципи) SOLID - Single responsibility principle - Open/closed principle From caa8053eca04bf4fb583a348247cf9a209fbfeac Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Wed, 17 Jul 2024 18:56:39 -0400 Subject: [PATCH 04/25] Add links to videos --- README.md | 37 +++++++++++++++++++++---------------- 1 file changed, 21 insertions(+), 16 deletions(-) diff --git a/README.md b/README.md index c4f180a..6843105 100644 --- a/README.md +++ b/README.md @@ -7,23 +7,8 @@ [UA](https://github.com/tshemsedinov/Patterns-JavaScript/tree/ua), [RU](https://github.com/tshemsedinov/Patterns-JavaScript/tree/ru). -- Шаблони (патерни чи принципи) GRASP - - Інформаційний експерт (Information expert) - - Утворювач (Creator) - - Контролер (Controller) - - Ненаправленість (Indirection) - - Низьке зчеплення (Low coupling) - - Висока згуртованість (High cohesion) - - Поліморфізм (Polymorphism) - - Захищені варіації (Protected variations) - - Чиста вигадка (Pure fabrication) -- Шаблони (патерни чи принципи) SOLID - - Single responsibility principle - - Open/closed principle - - Liskov substitution principle - - Interface segregation principle - - Dependency inversion principle - Патерни GoF + - 🧩 [GoF паттерни для Node.js та JavaScript (фрагмент семінару)](https://youtu.be/7TjzsZCQQqg) - Шаблони, що породжують - Абстрактна фабрика (Abstract factory) - [Будівельник (Builder)](https://github.com/HowProgrammingWorks/Builder) @@ -55,3 +40,23 @@ - [Стратегія (Strategy)](https://github.com/HowProgrammingWorks/Strategy) - Шаблонний метод (Template method) - Відвідувач (Visitor) +- Шаблони (патерни чи принципи) GRASP + - Вступний семінар + - Частина 1 - [GRASP для Node.js та Javascript](https://youtu.be/vm8p4jIQwp4) + - Частина 2 - скоро + - Інформаційний експерт (Information expert) + - Утворювач (Creator) + - Контролер (Controller) + - Ненаправленість (Indirection) + - Низьке зчеплення (Low coupling) + - Висока згуртованість (High cohesion) + - Поліморфізм (Polymorphism) + - Захищені варіації (Protected variations) + - Чиста вигадка (Pure fabrication) +- Шаблони (патерни чи принципи) SOLID + - Вступний семінар: [SOLID for Node.js and Javascript](https://youtu.be/B2guSV8EMn0) + - Single responsibility principle + - Open/closed principle + - Liskov substitution principle + - Interface segregation principle + - Dependency inversion principle From 16f5d9e4d4d05c4ad553b219acbdd9aa58ab801e Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Wed, 17 Jul 2024 19:00:04 -0400 Subject: [PATCH 05/25] Fix spelling --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 6843105..7f252da 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@ [RU](https://github.com/tshemsedinov/Patterns-JavaScript/tree/ru). - Патерни GoF - - 🧩 [GoF паттерни для Node.js та JavaScript (фрагмент семінару)](https://youtu.be/7TjzsZCQQqg) + - 🧩 [GoF патерни для Node.js та JavaScript (фрагмент семінару)](https://youtu.be/7TjzsZCQQqg) - Шаблони, що породжують - Абстрактна фабрика (Abstract factory) - [Будівельник (Builder)](https://github.com/HowProgrammingWorks/Builder) From 289bba30f1f7d3b26ed2f692ec58734a53e238a1 Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Wed, 17 Jul 2024 19:02:26 -0400 Subject: [PATCH 06/25] Add SOLID translation --- README.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 7f252da..5e55d65 100644 --- a/README.md +++ b/README.md @@ -55,8 +55,8 @@ - Чиста вигадка (Pure fabrication) - Шаблони (патерни чи принципи) SOLID - Вступний семінар: [SOLID for Node.js and Javascript](https://youtu.be/B2guSV8EMn0) - - Single responsibility principle - - Open/closed principle - - Liskov substitution principle - - Interface segregation principle - - Dependency inversion principle + - Принцип єдиної відповідальності (Single responsibility principle) + - Принцип відкритості/закритості (Open/closed principle) + - Принцип підстановки Лісков (Liskov substitution principle) + - Принцип розділення інтерфейсів (Interface segregation principle) + - Принцип інверсії залежностей (Dependency inversion principle) From b8cd115df5744c19a548a4ea600e8b86fdacf3f0 Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Wed, 17 Jul 2024 20:51:50 -0400 Subject: [PATCH 07/25] Add links to old lectures --- README.md | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 5e55d65..d536e67 100644 --- a/README.md +++ b/README.md @@ -42,19 +42,22 @@ - Відвідувач (Visitor) - Шаблони (патерни чи принципи) GRASP - Вступний семінар + - [Загальний огляд GRASP](https://youtu.be/ExauFjYV_lQ) - Частина 1 - [GRASP для Node.js та Javascript](https://youtu.be/vm8p4jIQwp4) - Частина 2 - скоро - - Інформаційний експерт (Information expert) + - [Інформаційний експерт (Information expert)](https://youtu.be/cCHL329_As0) - Утворювач (Creator) - Контролер (Controller) - Ненаправленість (Indirection) - - Низьке зчеплення (Low coupling) - - Висока згуртованість (High cohesion) + - [Низьке зчеплення (Low coupling)](https://youtu.be/IGXdPOZ3Fyk) + - [Висока згуртованість (High cohesion)](https://youtu.be/IGXdPOZ3Fyk) - Поліморфізм (Polymorphism) - Захищені варіації (Protected variations) - - Чиста вигадка (Pure fabrication) + - [Чиста вигадка (Pure fabrication)](https://youtu.be/CV577a0RHBM) + - [Приклади коду](https://youtu.be/4AMVQ2-2DcM) - Шаблони (патерни чи принципи) SOLID - Вступний семінар: [SOLID for Node.js and Javascript](https://youtu.be/B2guSV8EMn0) + - [SOLID питання на інтерв'ю](https://youtu.be/-9OM6-6pZw8) - Принцип єдиної відповідальності (Single responsibility principle) - Принцип відкритості/закритості (Open/closed principle) - Принцип підстановки Лісков (Liskov substitution principle) From d3badd8088a6bf34b7939bff744d36f3bf8c0792 Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Sun, 21 Jul 2024 08:50:03 -0400 Subject: [PATCH 08/25] Add solid videos --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index d536e67..c846138 100644 --- a/README.md +++ b/README.md @@ -58,8 +58,8 @@ - Шаблони (патерни чи принципи) SOLID - Вступний семінар: [SOLID for Node.js and Javascript](https://youtu.be/B2guSV8EMn0) - [SOLID питання на інтерв'ю](https://youtu.be/-9OM6-6pZw8) - - Принцип єдиної відповідальності (Single responsibility principle) + - [Принцип єдиної відповідальності (Single responsibility principle)](https://youtu.be/o4bQywkBKOI) - Принцип відкритості/закритості (Open/closed principle) - - Принцип підстановки Лісков (Liskov substitution principle) + - [Принцип підстановки Лісков (Liskov substitution principle)](https://youtu.be/RbhYxygxroc) - Принцип розділення інтерфейсів (Interface segregation principle) - Принцип інверсії залежностей (Dependency inversion principle) From 588ca612c7ec3e10b2bb5c44376473872f6b5ea8 Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Sun, 21 Jul 2024 09:07:57 -0400 Subject: [PATCH 09/25] Add emojis --- README.md | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index c846138..4ced41c 100644 --- a/README.md +++ b/README.md @@ -7,15 +7,15 @@ [UA](https://github.com/tshemsedinov/Patterns-JavaScript/tree/ua), [RU](https://github.com/tshemsedinov/Patterns-JavaScript/tree/ru). -- Патерни GoF - - 🧩 [GoF патерни для Node.js та JavaScript (фрагмент семінару)](https://youtu.be/7TjzsZCQQqg) - - Шаблони, що породжують +- 🧩 Патерни GoF + - 📢 [GoF патерни для Node.js та JavaScript (фрагмент семінару)](https://youtu.be/7TjzsZCQQqg) + - 🏭 Шаблони, що породжують - Абстрактна фабрика (Abstract factory) - [Будівельник (Builder)](https://github.com/HowProgrammingWorks/Builder) - [Фабричний метод (Factory method)](https://github.com/HowProgrammingWorks/Factory) - [Прототип (Prototype)](https://github.com/HowProgrammingWorks/Prototype) - [Одинак (Singleton)](https://github.com/HowProgrammingWorks/Singleton) - - Структурні шаблони + - 🤝 Структурні шаблони - [Адаптер (Adapter)](https://github.com/HowProgrammingWorks/Adapter) - [Міст (Bridge)](https://github.com/HowProgrammingWorks/Bridge) - [Компонувальник (Composite)](https://github.com/HowProgrammingWorks/Composite) @@ -23,7 +23,7 @@ - [Фасад (Facade)](https://github.com/HowProgrammingWorks/Facade) - Легковаговик (Flyweight) - [Проксі (Proxy)](https://github.com/HowProgrammingWorks/Proxy) - - Шаблони поведінки + - ⚡ Шаблони поведінки - Ланцюжок обов'язків (Chain of responsibility) - [Chain of responsibility](https://github.com/HowProgrammingWorks/ChainOfResponsibility) - Middleware @@ -40,8 +40,8 @@ - [Стратегія (Strategy)](https://github.com/HowProgrammingWorks/Strategy) - Шаблонний метод (Template method) - Відвідувач (Visitor) -- Шаблони (патерни чи принципи) GRASP - - Вступний семінар +- 🧩 Шаблони (патерни чи принципи) GRASP + - 📢 Вступний семінар - [Загальний огляд GRASP](https://youtu.be/ExauFjYV_lQ) - Частина 1 - [GRASP для Node.js та Javascript](https://youtu.be/vm8p4jIQwp4) - Частина 2 - скоро @@ -55,8 +55,8 @@ - Захищені варіації (Protected variations) - [Чиста вигадка (Pure fabrication)](https://youtu.be/CV577a0RHBM) - [Приклади коду](https://youtu.be/4AMVQ2-2DcM) -- Шаблони (патерни чи принципи) SOLID - - Вступний семінар: [SOLID for Node.js and Javascript](https://youtu.be/B2guSV8EMn0) +- 🧩 Шаблони (патерни чи принципи) SOLID + - 📢 Вступний семінар: [SOLID for Node.js and Javascript](https://youtu.be/B2guSV8EMn0) - [SOLID питання на інтерв'ю](https://youtu.be/-9OM6-6pZw8) - [Принцип єдиної відповідальності (Single responsibility principle)](https://youtu.be/o4bQywkBKOI) - Принцип відкритості/закритості (Open/closed principle) From 97fcf378a713406eaf7758713403a0e9980e002b Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Fri, 26 Jul 2024 06:14:17 -0400 Subject: [PATCH 10/25] Fix Prototype --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 4ced41c..897edc4 100644 --- a/README.md +++ b/README.md @@ -13,7 +13,7 @@ - Абстрактна фабрика (Abstract factory) - [Будівельник (Builder)](https://github.com/HowProgrammingWorks/Builder) - [Фабричний метод (Factory method)](https://github.com/HowProgrammingWorks/Factory) - - [Прототип (Prototype)](https://github.com/HowProgrammingWorks/Prototype) + - [Прототип (Prototype)](https://github.com/HowProgrammingWorks/PrototypePattern) не плутати з [прототипним програмуванням](https://github.com/HowProgrammingWorks/Prototype) - [Одинак (Singleton)](https://github.com/HowProgrammingWorks/Singleton) - 🤝 Структурні шаблони - [Адаптер (Adapter)](https://github.com/HowProgrammingWorks/Adapter) From d6fb43c2682c999c73eb8eed16748512a709b3cc Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Tue, 30 Jul 2024 20:04:31 -0400 Subject: [PATCH 11/25] Add Visitor --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 897edc4..9f04a7c 100644 --- a/README.md +++ b/README.md @@ -39,7 +39,7 @@ - Стан (State) - [Стратегія (Strategy)](https://github.com/HowProgrammingWorks/Strategy) - Шаблонний метод (Template method) - - Відвідувач (Visitor) + - [Відвідувач (Visitor)](https://github.com/HowProgrammingWorks/Visitor) - 🧩 Шаблони (патерни чи принципи) GRASP - 📢 Вступний семінар - [Загальний огляд GRASP](https://youtu.be/ExauFjYV_lQ) From d9ce75d07bb70253a4a52cd3e31523e624e208ff Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Wed, 31 Jul 2024 17:18:45 -0400 Subject: [PATCH 12/25] Add Flyweight --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 9f04a7c..47064f8 100644 --- a/README.md +++ b/README.md @@ -21,7 +21,7 @@ - [Компонувальник (Composite)](https://github.com/HowProgrammingWorks/Composite) - Декоратор (Decorator) - [Фасад (Facade)](https://github.com/HowProgrammingWorks/Facade) - - Легковаговик (Flyweight) + - [Легковаговик (Flyweight)](https://github.com/HowProgrammingWorks/Flyweight) - [Проксі (Proxy)](https://github.com/HowProgrammingWorks/Proxy) - ⚡ Шаблони поведінки - Ланцюжок обов'язків (Chain of responsibility) From 8471dfd734a2d85fc3708b83b79d5181106181a3 Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Thu, 19 Dec 2024 21:43:48 -0500 Subject: [PATCH 13/25] Update [ua] README.md --- README.md | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index 47064f8..a45b8f9 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ - 🧩 Патерни GoF - 📢 [GoF патерни для Node.js та JavaScript (фрагмент семінару)](https://youtu.be/7TjzsZCQQqg) - 🏭 Шаблони, що породжують - - Абстрактна фабрика (Abstract factory) + - [Абстрактна фабрика (Abstract factory)](https://github.com/HowProgrammingWorks/AbstractFactory) - [Будівельник (Builder)](https://github.com/HowProgrammingWorks/Builder) - [Фабричний метод (Factory method)](https://github.com/HowProgrammingWorks/Factory) - [Прототип (Prototype)](https://github.com/HowProgrammingWorks/PrototypePattern) не плутати з [прототипним програмуванням](https://github.com/HowProgrammingWorks/Prototype) @@ -19,26 +19,26 @@ - [Адаптер (Adapter)](https://github.com/HowProgrammingWorks/Adapter) - [Міст (Bridge)](https://github.com/HowProgrammingWorks/Bridge) - [Компонувальник (Composite)](https://github.com/HowProgrammingWorks/Composite) - - Декоратор (Decorator) + - Декоратор (Decorator) та [Обертка (Wrapper)](https://github.com/HowProgrammingWorks/Wrapper) - [Фасад (Facade)](https://github.com/HowProgrammingWorks/Facade) - [Легковаговик (Flyweight)](https://github.com/HowProgrammingWorks/Flyweight) - [Проксі (Proxy)](https://github.com/HowProgrammingWorks/Proxy) - ⚡ Шаблони поведінки - Ланцюжок обов'язків (Chain of responsibility) - [Chain of responsibility](https://github.com/HowProgrammingWorks/ChainOfResponsibility) - - Middleware + - [Middleware](https://www.youtube.com/watch?v=RS8x73z4csI) - [Команда (Command)](https://github.com/HowProgrammingWorks/Command) - - Інтерпретатор (Interpreter) + - [Інтерпретатор (Interpreter)](https://github.com/HowProgrammingWorks/Interpreter) - [Ітератор (Iterator)](https://github.com/HowProgrammingWorks/Iterator) - - Посредник (Mediator) - - Знімок (Memento) + - [Посредник (Mediator)](https://github.com/HowProgrammingWorks/Mediator) + - [Знімок (Memento)](https://github.com/HowProgrammingWorks/Memento) - Спостерігач (Observable та Observer, EventEmitter, EventTarget) - [EventTarget and EventEmitter](https://github.com/HowProgrammingWorks/Events) - [EventEmitter](https://github.com/HowProgrammingWorks/EventEmitter) - [Спостерігач (Observer)](https://github.com/HowProgrammingWorks/Observer) - - Стан (State) + - [Стан (State)](https://github.com/HowProgrammingWorks/State) - [Стратегія (Strategy)](https://github.com/HowProgrammingWorks/Strategy) - - Шаблонний метод (Template method) + - [Шаблонний метод (Template method)](https://github.com/HowProgrammingWorks/TemplateMethod) - [Відвідувач (Visitor)](https://github.com/HowProgrammingWorks/Visitor) - 🧩 Шаблони (патерни чи принципи) GRASP - 📢 Вступний семінар From 0315c9f479ac9e05f4be668161976bc9b9101d92 Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Fri, 20 Dec 2024 15:16:04 -0500 Subject: [PATCH 14/25] Add SOLID examples --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index a45b8f9..6ceacb4 100644 --- a/README.md +++ b/README.md @@ -59,7 +59,7 @@ - 📢 Вступний семінар: [SOLID for Node.js and Javascript](https://youtu.be/B2guSV8EMn0) - [SOLID питання на інтерв'ю](https://youtu.be/-9OM6-6pZw8) - [Принцип єдиної відповідальності (Single responsibility principle)](https://youtu.be/o4bQywkBKOI) - - Принцип відкритості/закритості (Open/closed principle) + - [Принцип відкритості/закритості (Open/closed principle)](https://github.com/HowProgrammingWorks/OpenClosed) - [Принцип підстановки Лісков (Liskov substitution principle)](https://youtu.be/RbhYxygxroc) - - Принцип розділення інтерфейсів (Interface segregation principle) - - Принцип інверсії залежностей (Dependency inversion principle) + - [Принцип розділення інтерфейсів (Interface segregation principle)](https://github.com/HowProgrammingWorks/InterfaceSegregation) + - [Принцип інверсії залежностей (Dependency inversion principle)](https://github.com/HowProgrammingWorks/DependencyInversion) From 5dc6518a551fd4fc557f23aee2456bc563a1ad98 Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Thu, 27 Mar 2025 08:04:58 -0400 Subject: [PATCH 15/25] Add translation --- README.md | 63 ++++++++++++++++++++++++++++++------------------------- 1 file changed, 34 insertions(+), 29 deletions(-) diff --git a/README.md b/README.md index 6ceacb4..267e085 100644 --- a/README.md +++ b/README.md @@ -7,39 +7,44 @@ [UA](https://github.com/tshemsedinov/Patterns-JavaScript/tree/ua), [RU](https://github.com/tshemsedinov/Patterns-JavaScript/tree/ru). -- 🧩 Патерни GoF +- 🧩 Патерни - 📢 [GoF патерни для Node.js та JavaScript (фрагмент семінару)](https://youtu.be/7TjzsZCQQqg) - 🏭 Шаблони, що породжують - - [Абстрактна фабрика (Abstract factory)](https://github.com/HowProgrammingWorks/AbstractFactory) - - [Будівельник (Builder)](https://github.com/HowProgrammingWorks/Builder) - - [Фабричний метод (Factory method)](https://github.com/HowProgrammingWorks/Factory) - - [Прототип (Prototype)](https://github.com/HowProgrammingWorks/PrototypePattern) не плутати з [прототипним програмуванням](https://github.com/HowProgrammingWorks/Prototype) - - [Одинак (Singleton)](https://github.com/HowProgrammingWorks/Singleton) + - [Абстрактна фабрика (Abstract factory)](https://github.com/HowProgrammingWorks/AbstractFactory) — створює пов’язані об'єкти одного сімейства без зазначення їх конкретних класів, наприклад, візуальні компоненти під різні платформи. + - [Будівельник (Builder)](https://github.com/HowProgrammingWorks/Builder) — покрокова збірка складного об'єкта з можливістю конфігурації, часто через чейнінг, наприклад, Query Builder або Form Generator. + - [Фабрика (Factory)](https://github.com/HowProgrammingWorks/Factory) — функція або метод для створення об'єктів різними способами: складанням частинами з літералів об'єктів і окремих методів, через міксіни, setPrototypeOf. + - [Фабричний метод (Factory method)](https://github.com/HowProgrammingWorks/Factory) — вибирає потрібну абстракцію для створення екземпляра, у JavaScript це можна реалізувати через `if`, `switch` або вибір конструктора з колекції. + - [Прототип (Prototype)](https://github.com/HowProgrammingWorks/PrototypePattern) — клонування об'єкта із заздалегідь підготовленого екземпляра для економії ресурсів при створенні (не плутати з [прототипним наслідуванням](https://github.com/HowProgrammingWorks/Prototype), воно ближче до Flyweight). + - [Легковаговик (Flyweight)](https://github.com/HowProgrammingWorks/Flyweight) — економія пам'яті для групи об'єктів через доступ до спільного (розділюваного) стану в конкретному екземплярі. + - [Одинак (Singleton)](https://github.com/HowProgrammingWorks/Singleton) — глобальний доступ до єдиного екземпляра, часто вважається антипатерном, найпростіше реалізувати через кеш модульних систем ESM/CJS. + - [Пул об'єктів (Object Pool)](https://github.com/HowProgrammingWorks/Pool) — повторне використання заздалегідь створених об'єктів для економії ресурсів при частому створенні й знищенні. - 🤝 Структурні шаблони - - [Адаптер (Adapter)](https://github.com/HowProgrammingWorks/Adapter) - - [Міст (Bridge)](https://github.com/HowProgrammingWorks/Bridge) - - [Компонувальник (Composite)](https://github.com/HowProgrammingWorks/Composite) - - Декоратор (Decorator) та [Обертка (Wrapper)](https://github.com/HowProgrammingWorks/Wrapper) - - [Фасад (Facade)](https://github.com/HowProgrammingWorks/Facade) - - [Легковаговик (Flyweight)](https://github.com/HowProgrammingWorks/Flyweight) - - [Проксі (Proxy)](https://github.com/HowProgrammingWorks/Proxy) + - [Адаптер (Adapter)](https://github.com/HowProgrammingWorks/Adapter) — конвертер, що перетворює несумісний інтерфейс на сумісний, дозволяючи використовувати сторонній компонент без змін його коду, може перетворювати контракт функції в об'єкт або навпаки. + - [Обгортка (Wrapper)](https://github.com/HowProgrammingWorks/Wrapper) — обгортка над функцією з прокиданням виклику (делегуванням) і додаванням поведінки, частковий випадок патерна Adapter. + - Боксування (Boxing) — упаковка примітивів у об'єктні типи для додавання методів або уніфікації інтерфейсів, наприклад, звуження String до AddressString. + - Декоратор — динамічно розширює поведінку без наслідування, зазвичай через композицію та декларативний синтаксис, по суті додає метадані. + - [Проксі чи Замісник (Proxy)](https://github.com/HowProgrammingWorks/Proxy) — контролює доступ до об'єкта, перехоплює виклики, читання та запис, може застосовуватись для лінивої ініціалізації, кешування та безпеки; реалізується як через патерн GoF, так і вбудованим JavaScript Proxy. + - [Міст (Bridge)](https://github.com/HowProgrammingWorks/Bridge) — розділення двох або більше ієрархій абстракцій через композицію або агрегацію, дозволяючи їм змінюватися незалежно. + - [Компоновщик (Composite)](https://github.com/HowProgrammingWorks/Composite) — реалізує загальний інтерфейс, що дозволяє однаково працювати з окремими об'єктами та їхніми деревами, наприклад, DOM чи файлова система. + - [Фасад (Facade)](https://github.com/HowProgrammingWorks/Facade) — спрощує доступ до складної системи, надаючи єдиний і зрозумілий інтерфейс споживачеві (коду, що використовує), захищає та приховує складність. + - [Легковаговик (Flyweight)](https://github.com/HowProgrammingWorks/Flyweight) — економія пам'яті для групи об'єктів через доступ до спільного (розділюваного) стану в конкретному екземплярі. - ⚡ Шаблони поведінки - - Ланцюжок обов'язків (Chain of responsibility) - - [Chain of responsibility](https://github.com/HowProgrammingWorks/ChainOfResponsibility) - - [Middleware](https://www.youtube.com/watch?v=RS8x73z4csI) - - [Команда (Command)](https://github.com/HowProgrammingWorks/Command) - - [Інтерпретатор (Interpreter)](https://github.com/HowProgrammingWorks/Interpreter) - - [Ітератор (Iterator)](https://github.com/HowProgrammingWorks/Iterator) - - [Посредник (Mediator)](https://github.com/HowProgrammingWorks/Mediator) - - [Знімок (Memento)](https://github.com/HowProgrammingWorks/Memento) - - Спостерігач (Observable та Observer, EventEmitter, EventTarget) - - [EventTarget and EventEmitter](https://github.com/HowProgrammingWorks/Events) - - [EventEmitter](https://github.com/HowProgrammingWorks/EventEmitter) - - [Спостерігач (Observer)](https://github.com/HowProgrammingWorks/Observer) - - [Стан (State)](https://github.com/HowProgrammingWorks/State) - - [Стратегія (Strategy)](https://github.com/HowProgrammingWorks/Strategy) - - [Шаблонний метод (Template method)](https://github.com/HowProgrammingWorks/TemplateMethod) - - [Відвідувач (Visitor)](https://github.com/HowProgrammingWorks/Visitor) + - [Ланцюжок відповідальності (Chain of responsibility)](https://github.com/HowProgrammingWorks/ChainOfResponsibility) — передача управління ланцюжком обробників для вибору відповідального, читають всі, але змінити може тільки один. + - [Middleware](https://www.youtube.com/watch?v=RS8x73z4csI) — ланцюжок обробників, як CoR, але кожен може змінювати стан і передавати управління далі, що може призводити до гонки, конфліктів, помилок. + - [Команда (Command)](https://github.com/HowProgrammingWorks/Command) — інкапсулює дію (запит на виконання) та її параметри в об'єкт, щоб передавати виконавцю, ставити в чергу, скасовувати, повторювати тощо. + - [Інтерпретатор (Interpreter)](https://github.com/HowProgrammingWorks/Interpreter) — реалізація мови (DSL—предметно-орієнтована мова) або розбір виразів у AST (абстрактне синтаксичне дерево) з можливістю інтерпретації. + - [Ітератор (Iterator)](https://github.com/HowProgrammingWorks/Iterator) — послідовний обхід колекції або потоку без доступу до всіх даних; у JavaScript є вбудовані Iterator та AsyncIterator. + - [Посередник (Mediator)](https://github.com/HowProgrammingWorks/Mediator) — оптимізація взаємодії між N компонентами, що потребували б N*(N-1)/2 зв’язків, а централізація взаємодії знижує зв’язність до N. + - [Знімок (Memento)](https://github.com/HowProgrammingWorks/Memento) — збереження та відновлення історії станів об'єкта без прямого доступу до самого стану. + - [Спостерігач (Observer)](https://github.com/HowProgrammingWorks/Observer) — повідомлення підписників про зміни стану об’єкта. + - [EventEmitter](https://github.com/HowProgrammingWorks/EventEmitter) для Node.js: Observable + listener + - [EventTarget](https://github.com/HowProgrammingWorks/Events) для Web API: EventTarget + Event (CustomEvent) + listener + - [Signal](https://github.com/HowProgrammingWorks/Signals) + - [Стан (State)](https://github.com/HowProgrammingWorks/State) — реалізація скінченного автомата (FSM), де методи — це переходи, а стан додається через композицію та змінюється при переходах. + - [Стратегія (Strategy)](https://github.com/HowProgrammingWorks/Strategy) — вибір взаємозамінної поведінки в рантаймі через колекцію реалізацій: функцій, об'єктів, класів. + - [Шаблонний метод (Template method)](https://github.com/HowProgrammingWorks/TemplateMethod) — фіксує кроки алгоритму, дозволяючи підкласам перевизначати окремі кроки та використовувати кроки предка як поведінку за замовчуванням. + - [Відвідувач (Visitor)](https://github.com/HowProgrammingWorks/Visitor) — дозволяє додавати операції до об'єктів без зміни їх класів, розділяючи структуру та поведінку на кілька абстракцій. + - [Відкритий конструктор (Revealing Constructor)](https://github.com/HowProgrammingWorks/RevealingConstructor) — зміна поведінки без наслідування, впровадження поведінки в конструктор у вигляді функції чи об'єкта, що містить поведінку та її опис. - 🧩 Шаблони (патерни чи принципи) GRASP - 📢 Вступний семінар - [Загальний огляд GRASP](https://youtu.be/ExauFjYV_lQ) From fa23495c7b96a699f0c5e4b793270baab0bb33a8 Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Thu, 27 Mar 2025 08:06:34 -0400 Subject: [PATCH 16/25] Add caption translation --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 267e085..e537fb5 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# 🧩 Шаблони для JavaScript та Node.js +# 🧩 Шаблони для JavaScript, TypeScript та Node.js > Переосмислення шаблонів GRASP (розподілу обов’язків - General Responsibility Assignment Software Patterns), SOLID (єдина відповідальність, відкритий–закритий, підстановка Лісков, розподілення інтерфейсів, інверсія залежностей), шаблони GoF (Банда чотирьох) для фронтенду (браузери) і бекенду (node.js, інші рантайми) розробки на JavaScript і TypeScript From 99679e42dba9074b0f2cfa0cffc6e1ac7c307187 Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Mon, 31 Mar 2025 05:17:42 -0400 Subject: [PATCH 17/25] Add translation --- README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.md b/README.md index e537fb5..6456757 100644 --- a/README.md +++ b/README.md @@ -45,6 +45,9 @@ - [Шаблонний метод (Template method)](https://github.com/HowProgrammingWorks/TemplateMethod) — фіксує кроки алгоритму, дозволяючи підкласам перевизначати окремі кроки та використовувати кроки предка як поведінку за замовчуванням. - [Відвідувач (Visitor)](https://github.com/HowProgrammingWorks/Visitor) — дозволяє додавати операції до об'єктів без зміни їх класів, розділяючи структуру та поведінку на кілька абстракцій. - [Відкритий конструктор (Revealing Constructor)](https://github.com/HowProgrammingWorks/RevealingConstructor) — зміна поведінки без наслідування, впровадження поведінки в конструктор у вигляді функції чи об'єкта, що містить поведінку та її опис. + - Реактор (Reactor, event-loop) – Обрабатывает параллельные события синхронно, помещая их в очередь и направляя зарегистрированным обработчикам. Реализует событийно-ориентированную асинхронную обработку поверх синхронного цикла событий. Часто применяется в системах с интенсивным I/O, упрощая управление конкурентными событиями. + - Актор (Actor) – Інкапсулює стан та поведінку, взаємодіючи асинхронно через передачу та послідовну обробку повідомлень у черзі. Забезпечує потокову та асинхронну безпеку при паралельному виконанні через ізоляцію стану актора. + - Реактор (event-loop) – Обробляє конкурентні події синхронно, додаючи їх до черги та спрямовуючи до зареєстрованих обробників. Реалізує подієво-орієнтовану асинхронну обробку на основі синхронного циклу подій. Часто використовується в системах з інтенсивним I/O, спрощуючи керування конкурентними подіями. - 🧩 Шаблони (патерни чи принципи) GRASP - 📢 Вступний семінар - [Загальний огляд GRASP](https://youtu.be/ExauFjYV_lQ) From 9e5a24084567f448b6cbb9cb89f6101908b226a1 Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Thu, 3 Apr 2025 03:42:31 -0400 Subject: [PATCH 18/25] Add translation --- README.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 6456757..05c7c0f 100644 --- a/README.md +++ b/README.md @@ -46,8 +46,9 @@ - [Відвідувач (Visitor)](https://github.com/HowProgrammingWorks/Visitor) — дозволяє додавати операції до об'єктів без зміни їх класів, розділяючи структуру та поведінку на кілька абстракцій. - [Відкритий конструктор (Revealing Constructor)](https://github.com/HowProgrammingWorks/RevealingConstructor) — зміна поведінки без наслідування, впровадження поведінки в конструктор у вигляді функції чи об'єкта, що містить поведінку та її опис. - Реактор (Reactor, event-loop) – Обрабатывает параллельные события синхронно, помещая их в очередь и направляя зарегистрированным обработчикам. Реализует событийно-ориентированную асинхронную обработку поверх синхронного цикла событий. Часто применяется в системах с интенсивным I/O, упрощая управление конкурентными событиями. - - Актор (Actor) – Інкапсулює стан та поведінку, взаємодіючи асинхронно через передачу та послідовну обробку повідомлень у черзі. Забезпечує потокову та асинхронну безпеку при паралельному виконанні через ізоляцію стану актора. - - Реактор (event-loop) – Обробляє конкурентні події синхронно, додаючи їх до черги та спрямовуючи до зареєстрованих обробників. Реалізує подієво-орієнтовану асинхронну обробку на основі синхронного циклу подій. Часто використовується в системах з інтенсивним I/O, спрощуючи керування конкурентними подіями. + - [Actor](https://github.com/HowProgrammingWorks/Actor) — Інкапсулює стан та поведінку, взаємодіючи асинхронно через передачу та послідовну обробку повідомлень у черзі. Забезпечує потокову та асинхронну безпеку при паралельному виконанні через ізоляцію стану актора. + - [Reactor (event-loop)](https://github.com/HowProgrammingWorks/Reactor) — Обробляє конкурентні події синхронно, додаючи їх до черги та спрямовуючи до зареєстрованих обробників. Реалізує подієво-орієнтовану асинхронну обробку на основі синхронного циклу подій. Часто використовується в системах з інтенсивним I/O, спрощуючи керування конкурентними подіями. + - [Proactor](https://github.com/HowProgrammingWorks/Proactor) — Цикл подій, у якому операції розпочинаються кодом користувача, але завершуються зовнішнім агентом (наприклад, I/O підсистемою), який запускає обробник завершення, коли операція завершується (повернення даних відбувається через callback). - 🧩 Шаблони (патерни чи принципи) GRASP - 📢 Вступний семінар - [Загальний огляд GRASP](https://youtu.be/ExauFjYV_lQ) From 791148cfe66166e475fe431e976a5308498761cf Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Thu, 10 Apr 2025 16:24:37 -0400 Subject: [PATCH 19/25] Update README.md --- README.md | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/README.md b/README.md index 05c7c0f..e76fc4e 100644 --- a/README.md +++ b/README.md @@ -49,6 +49,20 @@ - [Actor](https://github.com/HowProgrammingWorks/Actor) — Інкапсулює стан та поведінку, взаємодіючи асинхронно через передачу та послідовну обробку повідомлень у черзі. Забезпечує потокову та асинхронну безпеку при паралельному виконанні через ізоляцію стану актора. - [Reactor (event-loop)](https://github.com/HowProgrammingWorks/Reactor) — Обробляє конкурентні події синхронно, додаючи їх до черги та спрямовуючи до зареєстрованих обробників. Реалізує подієво-орієнтовану асинхронну обробку на основі синхронного циклу подій. Часто використовується в системах з інтенсивним I/O, спрощуючи керування конкурентними подіями. - [Proactor](https://github.com/HowProgrammingWorks/Proactor) — Цикл подій, у якому операції розпочинаються кодом користувача, але завершуються зовнішнім агентом (наприклад, I/O підсистемою), який запускає обробник завершення, коли операція завершується (повернення даних відбувається через callback). + Translate into ukrainian in same md format: + - 🗃️ Шаблони доступу до даних + - [Transaction Script](https://github.com/HowProgrammingWorks/TransactionScript) — процедурний шаблон, у якому кожна бізнес-операція реалізується як функція (процедура або скрипт). + - Pattern SAGA — шаблон розподіленої транзакції, у якому складний бізнес-процес розбивається на послідовність малих транзакцій, кожна з яких має компенсуючу дію на випадок збою. Дозволяє уникати розподілених блокувань. + - Unit of Work — шаблон відстежує зміни у бізнес-об'єктах і координує збереження як одну атомарну операцію в ORM або Repository, інкапсулюючи всю роботу в межах транзакції. + - Table Module — шаблон, у якому вся доменна логіка, пов’язана з таблицею бази даних, інкапсулюється в одному класі або модулі, при цьому рядки розглядаються як прості дані. + - [Value Object](https://github.com/HowProgrammingWorks/ValueObject) — незмінний, самоперевіряючийся об'єкт, що представляє концепт у домені без ідентифікатора. Використовується для вираження доменних обмежень і узгодженості логіки значень, порівняння за значенням у типобезпечній, явно вираженій формі. + - [Null Object](https://github.com/HowProgrammingWorks/ValueObject) — об'єкт, який реалізує стандартний інтерфейс, але надає нейтральну поведінку «do-nothing». Призначений для уникнення перевірок на null, спрощення логіки та забезпечення поліморфної безпеки. Є заміною дії «за замовчуванням», що усуває умовні конструкції та перевірки через гварди. + - [Active Record](https://github.com/HowProgrammingWorks/ActiveRecord) — доменний об'єкт, що інкапсулює запис у таблиці бази даних і надає методи для безпосереднього виконання операцій CRUD (створення, читання, оновлення, видалення) та специфічних запитів до себе. + - Data access object (DAO) — абстракція, яка визначає інтерфейс для збереження та отримання доменних об'єктів, ізолюючи доменну логіку від конкретних реалізацій сховища. + - Data transfer object (DTO) — анемічний об'єкт (лише дані) без доменної поведінки, призначений виключно для передавання структурованих даних між шарами, модулями, підсистемами або архітектурними межами. + - Data Access Layer (DAL) — шар, що абстрагує доступ до множини DAO або сирих джерел даних. Може бути реалізований як шаблон Facade. Часто включає трансформацію даних. + - [Repository](https://github.com/HowProgrammingWorks/Repository) — доменно-центрична абстракція для доступу до даних, яка повертає доменні сутності, а не сирі дані або DTO. + - Див. інші шаблони: Template method, Actor, State, Memento - 🧩 Шаблони (патерни чи принципи) GRASP - 📢 Вступний семінар - [Загальний огляд GRASP](https://youtu.be/ExauFjYV_lQ) From 127051029175c902e80a78450c42ddf95911022e Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Sun, 13 Apr 2025 16:59:12 -0400 Subject: [PATCH 20/25] Update README.md --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index e76fc4e..1d748c5 100644 --- a/README.md +++ b/README.md @@ -58,11 +58,11 @@ - [Value Object](https://github.com/HowProgrammingWorks/ValueObject) — незмінний, самоперевіряючийся об'єкт, що представляє концепт у домені без ідентифікатора. Використовується для вираження доменних обмежень і узгодженості логіки значень, порівняння за значенням у типобезпечній, явно вираженій формі. - [Null Object](https://github.com/HowProgrammingWorks/ValueObject) — об'єкт, який реалізує стандартний інтерфейс, але надає нейтральну поведінку «do-nothing». Призначений для уникнення перевірок на null, спрощення логіки та забезпечення поліморфної безпеки. Є заміною дії «за замовчуванням», що усуває умовні конструкції та перевірки через гварди. - [Active Record](https://github.com/HowProgrammingWorks/ActiveRecord) — доменний об'єкт, що інкапсулює запис у таблиці бази даних і надає методи для безпосереднього виконання операцій CRUD (створення, читання, оновлення, видалення) та специфічних запитів до себе. - - Data access object (DAO) — абстракція, яка визначає інтерфейс для збереження та отримання доменних об'єктів, ізолюючи доменну логіку від конкретних реалізацій сховища. + - [Data access object (DAO)](https://github.com/HowProgrammingWorks/Repository) — абстракція, яка визначає інтерфейс для збереження та отримання доменних об'єктів, ізолюючи доменну логіку від конкретних реалізацій сховища. - Data transfer object (DTO) — анемічний об'єкт (лише дані) без доменної поведінки, призначений виключно для передавання структурованих даних між шарами, модулями, підсистемами або архітектурними межами. - Data Access Layer (DAL) — шар, що абстрагує доступ до множини DAO або сирих джерел даних. Може бути реалізований як шаблон Facade. Часто включає трансформацію даних. - [Repository](https://github.com/HowProgrammingWorks/Repository) — доменно-центрична абстракція для доступу до даних, яка повертає доменні сутності, а не сирі дані або DTO. - - Див. інші шаблони: Template method, Actor, State, Memento + - Див. інші шаблони: [Template method](https://github.com/HowProgrammingWorks/TemplateMethod), [Actor](https://github.com/HowProgrammingWorks/Actor), [State](https://github.com/HowProgrammingWorks/State), [Memento](https://github.com/HowProgrammingWorks/Memento) - 🧩 Шаблони (патерни чи принципи) GRASP - 📢 Вступний семінар - [Загальний огляд GRASP](https://youtu.be/ExauFjYV_lQ) From 6cfef718dbb661e6862aafefc62dc73622a753ab Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Tue, 23 Sep 2025 04:37:18 -0400 Subject: [PATCH 21/25] Add links --- README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 1d748c5..7d8ff1b 100644 --- a/README.md +++ b/README.md @@ -13,7 +13,7 @@ - [Абстрактна фабрика (Abstract factory)](https://github.com/HowProgrammingWorks/AbstractFactory) — створює пов’язані об'єкти одного сімейства без зазначення їх конкретних класів, наприклад, візуальні компоненти під різні платформи. - [Будівельник (Builder)](https://github.com/HowProgrammingWorks/Builder) — покрокова збірка складного об'єкта з можливістю конфігурації, часто через чейнінг, наприклад, Query Builder або Form Generator. - [Фабрика (Factory)](https://github.com/HowProgrammingWorks/Factory) — функція або метод для створення об'єктів різними способами: складанням частинами з літералів об'єктів і окремих методів, через міксіни, setPrototypeOf. - - [Фабричний метод (Factory method)](https://github.com/HowProgrammingWorks/Factory) — вибирає потрібну абстракцію для створення екземпляра, у JavaScript це можна реалізувати через `if`, `switch` або вибір конструктора з колекції. + - [Фабричний метод (Factory method)](https://github.com/HowProgrammingWorks/FactoryMethod) — вибирає потрібну абстракцію для створення екземпляра, у JavaScript це можна реалізувати через `if`, `switch` або вибір конструктора з колекції. - [Прототип (Prototype)](https://github.com/HowProgrammingWorks/PrototypePattern) — клонування об'єкта із заздалегідь підготовленого екземпляра для економії ресурсів при створенні (не плутати з [прототипним наслідуванням](https://github.com/HowProgrammingWorks/Prototype), воно ближче до Flyweight). - [Легковаговик (Flyweight)](https://github.com/HowProgrammingWorks/Flyweight) — економія пам'яті для групи об'єктів через доступ до спільного (розділюваного) стану в конкретному екземплярі. - [Одинак (Singleton)](https://github.com/HowProgrammingWorks/Singleton) — глобальний доступ до єдиного екземпляра, часто вважається антипатерном, найпростіше реалізувати через кеш модульних систем ESM/CJS. @@ -21,8 +21,8 @@ - 🤝 Структурні шаблони - [Адаптер (Adapter)](https://github.com/HowProgrammingWorks/Adapter) — конвертер, що перетворює несумісний інтерфейс на сумісний, дозволяючи використовувати сторонній компонент без змін його коду, може перетворювати контракт функції в об'єкт або навпаки. - [Обгортка (Wrapper)](https://github.com/HowProgrammingWorks/Wrapper) — обгортка над функцією з прокиданням виклику (делегуванням) і додаванням поведінки, частковий випадок патерна Adapter. - - Боксування (Boxing) — упаковка примітивів у об'єктні типи для додавання методів або уніфікації інтерфейсів, наприклад, звуження String до AddressString. - - Декоратор — динамічно розширює поведінку без наслідування, зазвичай через композицію та декларативний синтаксис, по суті додає метадані. + - [Боксування (Boxing)](https://github.com/HowProgrammingWorks/ADT) — упаковка примітивів у об'єктні типи для додавання методів або уніфікації інтерфейсів, наприклад, звуження String до AddressString. + - [Декоратор](https://github.com/HowProgrammingWorks/Decorator) — динамічно розширює поведінку без наслідування, зазвичай через композицію та декларативний синтаксис, по суті додає метадані. - [Проксі чи Замісник (Proxy)](https://github.com/HowProgrammingWorks/Proxy) — контролює доступ до об'єкта, перехоплює виклики, читання та запис, може застосовуватись для лінивої ініціалізації, кешування та безпеки; реалізується як через патерн GoF, так і вбудованим JavaScript Proxy. - [Міст (Bridge)](https://github.com/HowProgrammingWorks/Bridge) — розділення двох або більше ієрархій абстракцій через композицію або агрегацію, дозволяючи їм змінюватися незалежно. - [Компоновщик (Composite)](https://github.com/HowProgrammingWorks/Composite) — реалізує загальний інтерфейс, що дозволяє однаково працювати з окремими об'єктами та їхніми деревами, наприклад, DOM чи файлова система. @@ -74,7 +74,7 @@ - Ненаправленість (Indirection) - [Низьке зчеплення (Low coupling)](https://youtu.be/IGXdPOZ3Fyk) - [Висока згуртованість (High cohesion)](https://youtu.be/IGXdPOZ3Fyk) - - Поліморфізм (Polymorphism) + - [Поліморфізм (Polymorphism)](https://youtu.be/IGXdPOZ3Fyk) - Захищені варіації (Protected variations) - [Чиста вигадка (Pure fabrication)](https://youtu.be/CV577a0RHBM) - [Приклади коду](https://youtu.be/4AMVQ2-2DcM) From 032919e5bafb4f09cefa5dd458b28c43e31422c9 Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Tue, 23 Sep 2025 05:11:30 -0400 Subject: [PATCH 22/25] GRASP videos --- README.md | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index 7d8ff1b..14ce0f3 100644 --- a/README.md +++ b/README.md @@ -64,18 +64,13 @@ - [Repository](https://github.com/HowProgrammingWorks/Repository) — доменно-центрична абстракція для доступу до даних, яка повертає доменні сутності, а не сирі дані або DTO. - Див. інші шаблони: [Template method](https://github.com/HowProgrammingWorks/TemplateMethod), [Actor](https://github.com/HowProgrammingWorks/Actor), [State](https://github.com/HowProgrammingWorks/State), [Memento](https://github.com/HowProgrammingWorks/Memento) - 🧩 Шаблони (патерни чи принципи) GRASP - - 📢 Вступний семінар - - [Загальний огляд GRASP](https://youtu.be/ExauFjYV_lQ) - - Частина 1 - [GRASP для Node.js та Javascript](https://youtu.be/vm8p4jIQwp4) - - Частина 2 - скоро + - [Загальний огляд GRASP](https://youtu.be/ExauFjYV_lQ) + - [GRASP Part 1: Information expert, Creator, Low coupling, High cohesion](https://youtu.be/vm8p4jIQwp4) + - [GRASP Part 1: Protected variations, Indirection, Pure fabrication, Polymorphism, Controller](https://youtu.be/aJGB7TLwiig) - [Інформаційний експерт (Information expert)](https://youtu.be/cCHL329_As0) - - Утворювач (Creator) - - Контролер (Controller) - - Ненаправленість (Indirection) - [Низьке зчеплення (Low coupling)](https://youtu.be/IGXdPOZ3Fyk) - [Висока згуртованість (High cohesion)](https://youtu.be/IGXdPOZ3Fyk) - [Поліморфізм (Polymorphism)](https://youtu.be/IGXdPOZ3Fyk) - - Захищені варіації (Protected variations) - [Чиста вигадка (Pure fabrication)](https://youtu.be/CV577a0RHBM) - [Приклади коду](https://youtu.be/4AMVQ2-2DcM) - 🧩 Шаблони (патерни чи принципи) SOLID From d2223fba2df83a1995dde4d93ae1537190dc1dda Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Mon, 27 Oct 2025 17:45:40 -0400 Subject: [PATCH 23/25] GRASP definitions Updated GRASP principles section with detailed explanations. --- README.md | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 14ce0f3..7afbb35 100644 --- a/README.md +++ b/README.md @@ -66,13 +66,22 @@ - 🧩 Шаблони (патерни чи принципи) GRASP - [Загальний огляд GRASP](https://youtu.be/ExauFjYV_lQ) - [GRASP Part 1: Information expert, Creator, Low coupling, High cohesion](https://youtu.be/vm8p4jIQwp4) - - [GRASP Part 1: Protected variations, Indirection, Pure fabrication, Polymorphism, Controller](https://youtu.be/aJGB7TLwiig) + - [GRASP Part 2: Protected variations, Indirection, Pure fabrication, Polymorphism, Controller](https://youtu.be/aJGB7TLwiig) - [Інформаційний експерт (Information expert)](https://youtu.be/cCHL329_As0) - [Низьке зчеплення (Low coupling)](https://youtu.be/IGXdPOZ3Fyk) - [Висока згуртованість (High cohesion)](https://youtu.be/IGXdPOZ3Fyk) - [Поліморфізм (Polymorphism)](https://youtu.be/IGXdPOZ3Fyk) - [Чиста вигадка (Pure fabrication)](https://youtu.be/CV577a0RHBM) - [Приклади коду](https://youtu.be/4AMVQ2-2DcM) + - Information Expert - розподіляйте обов'язок із виконання завдання на ті абстракції, які мають потрібні дані. Пов'язано: Encapsulation, Cohesion, Coupling, Information hiding, SOLID: SRP, SoC. + - Creator - якщо одна абстракція пише, читає, аггрегує, використовує, та сильно зачеплена з іншою, то вона і повинна її створювати та ініціалізувати. Зв'язно: Information Expert, GoF Creational patterns. + - Controller - містить use-case сценарії обробки зовнішніх I/O запитів, від UI, API чи Event Bus і делегує виконання іншим абстракціям. Пов'язано: GoF Command, Facade, Layers, Pure Fabrication. + - Low Coupling – кожна абстракція мінімально залежить від деталей реалізації інших, містить мінімум "знань" (звернень). Дає стійкість, простоту тестування та супроводу. Пов'язано: High Cohesion, Controller, Indirection, DIP, DI, IoC, Revealing constructor, Facade, Mediator, Observer, Strategy, State, Bridge, Adapter, Proxy. + - High Cohesion - усі внутрішні елементи абстракції тісно пов'язані спільною метою і "знають" контракти одне одного, спільно вирішують одну конкретну задачу. Такі абстракції легко розуміються, тестуються та супроводжуються. Пов'язано: Low Coupling, Information Expert, Composite, Facade, Adapter. Висока зв'язаність усередині модуля та низьке зачеплення між модулями дають стійкість системи. + - Polymorphism - за допомогою динамічної диспетчеризації абстракції вибирають поведінку та делегують дії об'єктам із загальним інтерфейсом замість явного розгалуження за типом. Пов'язано: GoF Strategy, Adapter, Creator, Command, State, Bridge, Template Method, Visitor, Factory Method, Proxy. + - Pure Fabrication – штучні абстракції, які не належать до предметної області, а обслуговують структурні, архітектурні та технічні потреби. Пов'язано: SRP, ISP, GoF: Facade, Adapter, Observer, Command, Mediator, Repository, Service. Приклади: EventEmitter, Stream, Connection, Promise, Error. + - Indirection – посередник для реалізації слабкого зачеплення між компонентами. Пов'язані: GoF Mediator, Facade, Observer, Service Layer, API Gateway, Message Broker, Event Bus. + - Protected Variations - захищає абстракції від зміни за допомогою винесення взаємодії у фіксований інтерфейс, тільки через який можлива взаємодія між абстракціями. Пов'язано: Interface, Contract programing, Generics, OCP, DIP, DI, IoC, GoF: Strategy, Bridge, Abstract Factory, Factory Method, Adapter, Proxy, Facade. - 🧩 Шаблони (патерни чи принципи) SOLID - 📢 Вступний семінар: [SOLID for Node.js and Javascript](https://youtu.be/B2guSV8EMn0) - [SOLID питання на інтерв'ю](https://youtu.be/-9OM6-6pZw8) From 304b3f4087600457d76ea489d160357c62f2ef3b Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Mon, 27 Oct 2025 17:53:48 -0400 Subject: [PATCH 24/25] SOLID definitions --- README.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/README.md b/README.md index 7afbb35..8515faf 100644 --- a/README.md +++ b/README.md @@ -90,3 +90,8 @@ - [Принцип підстановки Лісков (Liskov substitution principle)](https://youtu.be/RbhYxygxroc) - [Принцип розділення інтерфейсів (Interface segregation principle)](https://github.com/HowProgrammingWorks/InterfaceSegregation) - [Принцип інверсії залежностей (Dependency inversion principle)](https://github.com/HowProgrammingWorks/DependencyInversion) + - Single responsibility principle - у абстракції має бути лише одна причина зміни. "Модуль повинен відповідати за одного і тільки за одного актора." + - Open-closed principle - абстракції (класи, типи тощо.) мають бути відкриті для розширення, але закриті для модифікації. + - Liskov substitution principle - функції, які використовують базовий тип, повинні мати можливість використовувати підтипи базового типу, не знаючи про це. + - Interface segregation principle – багато інтерфейсів, спеціально призначених для клієнтів, краще ніж один інтерфейс загального призначення. + - Dependency inversion principle - Залежність на абстракції. Немає залежностей від конкретного. From ed4520f89d3065c7b652d687849941dbb2407da0 Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Mon, 3 Nov 2025 16:36:18 +0200 Subject: [PATCH 25/25] Add Service Locator --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 8515faf..42058a9 100644 --- a/README.md +++ b/README.md @@ -49,7 +49,7 @@ - [Actor](https://github.com/HowProgrammingWorks/Actor) — Інкапсулює стан та поведінку, взаємодіючи асинхронно через передачу та послідовну обробку повідомлень у черзі. Забезпечує потокову та асинхронну безпеку при паралельному виконанні через ізоляцію стану актора. - [Reactor (event-loop)](https://github.com/HowProgrammingWorks/Reactor) — Обробляє конкурентні події синхронно, додаючи їх до черги та спрямовуючи до зареєстрованих обробників. Реалізує подієво-орієнтовану асинхронну обробку на основі синхронного циклу подій. Часто використовується в системах з інтенсивним I/O, спрощуючи керування конкурентними подіями. - [Proactor](https://github.com/HowProgrammingWorks/Proactor) — Цикл подій, у якому операції розпочинаються кодом користувача, але завершуються зовнішнім агентом (наприклад, I/O підсистемою), який запускає обробник завершення, коли операція завершується (повернення даних відбувається через callback). - Translate into ukrainian in same md format: + - [Service Locator](https://github.com/HowProgrammingWorks/ServiceLocator) - центральний реєстр сервісів, який дозволяє нам реєструвати та отримувати абстракції між модулями (використовується для впровадження залежностей, в js це можна реалізувати через систему модулів ESM або CJS). - 🗃️ Шаблони доступу до даних - [Transaction Script](https://github.com/HowProgrammingWorks/TransactionScript) — процедурний шаблон, у якому кожна бізнес-операція реалізується як функція (процедура або скрипт). - Pattern SAGA — шаблон розподіленої транзакції, у якому складний бізнес-процес розбивається на послідовність малих транзакцій, кожна з яких має компенсуючу дію на випадок збою. Дозволяє уникати розподілених блокувань.