Перейти до вмісту

Патерни проектування в ABAP

Патерн проектування (design pattern) — перевірене, багаторазово використане рішення типової проблеми дизайну класів. Цей розділ містить адаптовані під ABAP Objects приклади найуживаніших патернів Gang of Four, плюс специфічні для SAP шаблони.

Правило номер один: не тягни патерн заради патерну. Якщо простіше рішення вирішує задачу — не ускладнюй. Патерн — це рішення проблеми, не готовий каркас.

Кожна сторінка патерну побудована за однаковою структурою:

  • Коли застосовувати — у якій ситуації патерн доречний.
  • Метафора — побутова аналогія для швидкого розуміння.
  • ABAP-реалізація — мінімальний приклад сучасним ABAP (inline DATA(...), NEW #( ), VALUE #( ), конструкторські вирази).
  • SAP-специфіка — готові класи/фреймворки SAP, що реалізують патерн.
  • Підводні камені — де новачки ламають собі ногу.
  • Коли НЕ використовувати — антипатерн-сигналізація.

Відповідають за створення обʼєктів: хто, як і коли їх інстанціює.

  • Singleton — єдиний екземпляр на весь runtime.
  • Factory Method — фабричний метод обирає конкретний клас.
  • Abstract Factory — сімейство повʼязаних обʼєктів з однієї фабрики.
  • Builder — покрокова побудова складного обʼєкта.
  • Prototype — клонування готового зразка замість створення з нуля.

Відповідають за взаємодію між обʼєктами і розподіл відповідальності.

  • Strategy — алгоритм як обʼєкт, підміна у runtime.
  • Observer — publisher-subscriber через ABAP events.
  • Command — виклик як обʼєкт (undo, черга, лог).
  • Template Method — скелет алгоритму з переозначуваними кроками.
  • State — поведінка залежить від стану-обʼєкта.
  • Iterator — обхід колекції без оголення структури.
  • Visitor — операція над ієрархією без правки її класів.
  • Mediator — централізований посередник замість прямих звʼязків.
  • Chain of Responsibility — ланцюг обробників.
  • Memento — знімок стану для відновлення.

Відповідають за композицію класів та обʼєктів.

  • Adapter — переведення одного інтерфейсу в інший.
  • Decorator — додати поведінку обгорткою.
  • Facade — спрощений фасад над складною підсистемою.
  • Proxy — заступник для ліньок, кешу, авторизації.
  • Composite — однакова робота з листом і контейнером дерева.
  • Flyweight — розшарений стан через пул.
  • Bridge — розʼєднання абстракції і реалізації.

Патерни, критичні саме для ABAP-проектів.

Коли який патерн — швидка таблиця

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 / statusState / Command