Skip to content

Instantly share code, notes, and snippets.

@odrotbohm
Last active April 19, 2025 23:51
Show Gist options
  • Save odrotbohm/25bfc913af3c6724e25f85e1fda861a6 to your computer and use it in GitHub Desktop.
Save odrotbohm/25bfc913af3c6724e25f85e1fda861a6 to your computer and use it in GitHub Desktop.
Sample rendering of Spring RESTBucks stereotype structure

Spring Modulith / jMolecules Stereotype Tree

Legend

■ – Application
□ – Module
○ – Named Interface
⊙ – Stereotype

Tree

■ Restbucks
├─□ Core
│ ╰─○ API
│   ├─┬⊙ Attribute Converter (JPA)
│   │ ├─╴o.s.r.c.MonetaryAmountAttributeConverter (API)
│   │ ╰─╴o.s.r.c.YearAttributeConverter (API)
│   ╰─┬⊙ Other
│     ╰─╴o.s.r.c.Currencies (API)
├─□ Drinks
│ ├─○ API
│ │ ├─┬⊙ Request mappings (Web)
│ │ │ ╰─╴GET /drinks/by-name DrinksOptions.getOptions(Optional)
│ │ ├─┬⊙ Aggregate Root (Domain-Driven Design)
│ │ │ ╰─╴o.s.r.d.Drink (API)
│ │ ├─┬⊙ Identifier (Domain-Driven Design)
│ │ │ ╰─╴o.s.r.d.Drink.DrinkIdentifier (API)
│ │ ├─┬⊙ Repository (Domain-Driven Design)
│ │ │ ╰─╴o.s.r.d.Drinks (API)
│ │ ├─┬⊙ Controller (Web)
│ │ │ ╰─╴o.s.r.d.DrinksOptions (API)
│ │ ╰─┬⊙ Other
│ │   ├─╴o.s.r.d.Milk (API)
│ │   ╰─╴o.s.r.d.Size (API)
│ ╰─○ Internal
│   ├─┬⊙ Representation Model Processor (Hypermedia)
│   │ ╰─╴o.s.r.d.DrinksModelProcessor (internal)
│   ├─┬⊙ JSON Mixin (REST)
│   │ ╰─╴o.s.r.d.DrinksConfiguration.DrinkMixin (internal)
│   ╰─┬⊙ Configuration (Spring)
│     ╰─╴o.s.r.d.DrinksConfiguration (internal)
├─□ Order
│ ├─○ API
│ │ ├─┬⊙ Aggregate Root (Domain-Driven Design)
│ │ │ ╰─╴o.s.r.o.Order (API)
│ │ ├─┬⊙ Entity (Domain-Driven Design)
│ │ │ ╰─╴o.s.r.o.LineItem (API)
│ │ ├─┬⊙ Identifier (Domain-Driven Design)
│ │ │ ├─╴o.s.r.o.LineItem.LineItemIdentifier (API)
│ │ │ ╰─╴o.s.r.o.Order.OrderIdentifier (API)
│ │ ├─┬⊙ Repository (Domain-Driven Design)
│ │ │ ╰─╴o.s.r.o.Orders (API)
│ │ ├─┬⊙ Domain Event (Events)
│ │ │ ├─╴o.s.r.o.Order.OrderCreated (API)
│ │ │ ├─╴o.s.r.o.Order.OrderInPreparation (API)
│ │ │ ├─╴o.s.r.o.Order.OrderLineItemCreated (API)
│ │ │ ├─╴o.s.r.o.Order.OrderPaid (API)
│ │ │ ├─╴o.s.r.o.Order.OrderPrepared (API)
│ │ │ ╰─╴o.s.r.o.Order.OrderTaken (API)
│ │ ├─┬⊙ Projection (Spring Data)
│ │ │ ╰─╴o.s.r.o.OrderProjection (API)
│ │ ╰─┬⊙ Other
│ │   ├─╴o.s.r.o.Location (API)
│ │   ╰─╴o.s.r.o.Order.Status (API)
│ ╰─○ Internal
│   ├─┬⊙ Request mappings (Web)
│   │ ╰─╴POST /orders OrderController.placeOrder(LocationAndDrinks, Errors, PersistentEntityResourceAssembler)
│   ├─┬⊙ Service (Domain-Driven Design)
│   │ ╰─╴o.s.r.o.OrderInitializer (internal)
│   ├─┬⊙ Representation Model Processor (Hypermedia)
│   │ ├─╴o.s.r.o.web.CoreOrderResourceProcessor (internal)
│   │ ╰─╴o.s.r.o.web.RootResourceModelProcessor (internal)
│   ├─┬⊙ JSON Mixin (REST)
│   │ ├─╴o.s.r.o.web.OrderConfiguration.LineItemMixin (internal)
│   │ ╰─╴o.s.r.o.web.OrderConfiguration.OrderMixin (internal)
│   ├─┬⊙ Configuration (Spring)
│   │ ├─╴o.s.r.o.web.OrderConfiguration (internal)
│   │ ╰─╴o.s.r.o.web.OrderObservabilityConfiguration (internal)
│   ├─┬⊙ Controller (Web)
│   │ ╰─╴o.s.r.o.web.OrderController (internal)
│   ╰─┬⊙ Other
│     ├─╴o.s.r.o.web.LocationAndDrinks (internal)
│     ├─╴o.s.r.o.web.OrderAlreadyPaid (internal)
│     ╰─╴o.s.r.o.web.OrderControllerEventListener (internal)
├─□ Engine
│ ╰─○ Internal
│   ├─┬⊙ Event Listener (Spring)
│   │ ╰─╴Engine.handleOrderPaidEvent(OrderPaid)
│   ├─┬⊙ Service (Domain-Driven Design)
│   │ ╰─╴o.s.r.e.Engine (internal)
│   ╰─┬⊙ Other
│     ╰─╴o.s.r.e.EngineSettings (internal)
╰─□ Payment
  ├─○ API
  │ ╰─┬⊙ Application (Hexagonal Architecture)
  │   ├─┬⊙ Aggregate Root (Domain-Driven Design)
  │   │ ├─╴o.s.r.p.CreditCard (API)
  │   │ ├─╴o.s.r.p.CreditCardPayment (API)
  │   │ ╰─╴o.s.r.p.Payment (API)
  │   ├─┬⊙ Identifier (Domain-Driven Design)
  │   │ ├─╴o.s.r.p.CreditCardNumber (API)
  │   │ ╰─╴o.s.r.p.Payment.PaymentIdentifier (API)
  │   ╰─┬⊙ Other
  │     ├─╴o.s.r.p.Payment.Receipt (API)
  │     ├─╴o.s.r.p.PaymentFailed (API)
  │     ╰─╴o.s.r.p.PaymentService (API)
  ╰─○ Internal
    ├─┬⊙ Application (Hexagonal Architecture)
    │ ├─┬⊙ Service (Domain-Driven Design)
    │ │ ├─╴o.s.r.p.PaymentInitializer (internal)
    │ │ ╰─╴o.s.r.p.PaymentServiceImpl (internal)
    │ ╰─┬⊙ Repository (Domain-Driven Design)
    │   ├─╴o.s.r.p.CreditCards (internal)
    │   ╰─╴o.s.r.p.Payments (internal)
    ╰─┬⊙ Primary Adapter (Hexagonal Architecture)
      ├─┬⊙ Request mappings (Web)
      │ ├─╴PUT /orders/{id}/payment PaymentController.submitPayment(Order, PaymentForm)
      │ ├─╴GET /orders/{id}/receipt PaymentController.showReceipt(Order)
      │ ╰─╴DELETE /orders/{id}/receipt PaymentController.takeReceipt(Order)
      ├─┬⊙ Representation Model Processor (Hypermedia)
      │ ╰─╴o.s.r.p.web.PaymentOrderModelProcessor (internal)
      ├─┬⊙ JSON Mixin (REST)
      │ ├─╴o.s.r.p.web.PaymentConfiguration.CreditCardMixin (internal)
      │ ╰─╴o.s.r.p.web.PaymentConfiguration.ReceiptMixin (internal)
      ├─┬⊙ Configuration (Spring)
      │ ╰─╴o.s.r.p.web.PaymentConfiguration (internal)
      ├─┬⊙ Controller (Web)
      │ ╰─╴o.s.r.p.web.PaymentController (internal)
      ╰─┬⊙ Other
        ├─╴o.s.r.p.web.PaymentController.PaymentForm (internal)
        ├─╴o.s.r.p.web.PaymentController.PaymentModel (internal)
        ╰─╴o.s.r.p.web.PaymentLinks (internal)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment