Патерни проектування в ABAP
Патерн проектування (design pattern) — перевірене, багаторазово використане рішення типової проблеми дизайну класів. Цей розділ містить адаптовані під ABAP Objects приклади найуживаніших патернів Gang of Four, плюс специфічні для SAP шаблони.
Правило номер один: не тягни патерн заради патерну. Якщо простіше рішення вирішує задачу — не ускладнюй. Патерн — це рішення проблеми, не готовий каркас.
Як читати цей розділ
Section titled “Як читати цей розділ”Кожна сторінка патерну побудована за однаковою структурою:
- Коли застосовувати — у якій ситуації патерн доречний.
- Метафора — побутова аналогія для швидкого розуміння.
- ABAP-реалізація — мінімальний приклад сучасним ABAP (inline
DATA(...),NEW #( ),VALUE #( ), конструкторські вирази). - SAP-специфіка — готові класи/фреймворки SAP, що реалізують патерн.
- Підводні камені — де новачки ламають собі ногу.
- Коли НЕ використовувати — антипатерн-сигналізація.
Категорії (GoF)
Section titled “Категорії (GoF)”Породжуючі (Creational)
Section titled “Породжуючі (Creational)”Відповідають за створення обʼєктів: хто, як і коли їх інстанціює.
- Singleton — єдиний екземпляр на весь runtime.
- Factory Method — фабричний метод обирає конкретний клас.
- Abstract Factory — сімейство повʼязаних обʼєктів з однієї фабрики.
- Builder — покрокова побудова складного обʼєкта.
- Prototype — клонування готового зразка замість створення з нуля.
Поведінкові (Behavioral)
Section titled “Поведінкові (Behavioral)”Відповідають за взаємодію між обʼєктами і розподіл відповідальності.
- Strategy — алгоритм як обʼєкт, підміна у runtime.
- Observer — publisher-subscriber через ABAP events.
- Command — виклик як обʼєкт (undo, черга, лог).
- Template Method — скелет алгоритму з переозначуваними кроками.
- State — поведінка залежить від стану-обʼєкта.
- Iterator — обхід колекції без оголення структури.
- Visitor — операція над ієрархією без правки її класів.
- Mediator — централізований посередник замість прямих звʼязків.
- Chain of Responsibility — ланцюг обробників.
- Memento — знімок стану для відновлення.
Структурні (Structural)
Section titled “Структурні (Structural)”Відповідають за композицію класів та обʼєктів.
- Adapter — переведення одного інтерфейсу в інший.
- Decorator — додати поведінку обгорткою.
- Facade — спрощений фасад над складною підсистемою.
- Proxy — заступник для ліньок, кешу, авторизації.
- Composite — однакова робота з листом і контейнером дерева.
- Flyweight — розшарений стан через пул.
- Bridge — розʼєднання абстракції і реалізації.
ABAP-специфічні
Section titled “ABAP-специфічні”Патерни, критичні саме для ABAP-проектів.
- DAO (Data Access Object) — відокремлення SQL від бізнес-логіки.
- Injection-патерни для тестування — constructor / setter / backdoor / redefinition.
Коли який патерн — швидка таблиця
Section titled “Коли який патерн — швидка таблиця”| Задача | Патерн |
|---|---|
| Кілька реалізацій одного контракту | Strategy |
| Одне місце створення — багато залежать | Factory Method / Abstract Factory |
| Скелет з переозначуваними кроками | Template Method |
| Додати поведінку без зміни класу | Decorator |
| Підʼєднати чужий API до свого контракту | Adapter |
| Спростити роботу зі складною підсистемою | Facade |
| Сповістити множину обʼєктів про подію | Observer |
| Дерево з листами і контейнерами | Composite |
| Дії як обʼєкти (undo, queue, log) | Command |
| Кеш / ліньки / контроль доступу | Proxy |
| Складна побудова обʼєкта по кроках | Builder |
| Глобальна точка доступу (обережно) | Singleton |
| Відокремити БД від логіки | DAO |
Складний умовний код на sy-ucomm / status | State / Command |