GRASP

flowchart TB
  UI["Web / CLI / API"] --> OC["OrderController
  Controller"]
  OC --> OS["OrderService
  Use-case coordinator"]
  OS --> O["Order
  Domain Entity"]
  O --> LI["LineItem
  Domain Entity"]
  O --> INV["InventoryPolicy
  Information Expert"]
  
  OS --> PR["PricingRules
  Polymorphism"]
  PR --> PRa["StdPricing"]
  PR --> PRb["PromoPricing"]

  OS --> PG["PaymentGateway interface
  Indirection / Protected Variations"]
  PG --> Stripe["StripeAdapter"]
  PG --> Adyen["AdyenAdapter"]

  OS --> OR["OrderRepository
  Pure Fabrication"]
  OR --> DB[("Database")]

Creator

Information Expert

Controller

High Cohesion

Low Coupling

Indirection

Pure Fabrication

Protected Variations

Polymorphism

Low Cohesion