Skip to content

Decision Matrix

This matrix helps choose between Bus Mode (CQRS) and Direct Mode (Use Case) based on operation complexity.

Quick Decision Tree

Does the operation need domain events?
├─ YES → Bus Mode
└─ NO
    └─ Does it involve multiple entities or complex business rules?
        ├─ YES → Bus Mode
        └─ NO → Direct Mode

Comparison Table

Criterion Direct Mode Bus Mode
Simple CRUD ✅ Recommended ❌ Over-engineered
Complex business logic ⚠️ Possible ✅ Recommended
Domain events needed ❌ Manual ✅ Automatic
Multi-entity transactions ⚠️ Manual ✅ Built-in
Middleware support ❌ No ✅ Yes
Async processing ❌ Hard to add ✅ Easy to add
Development speed ✅ Faster ⚠️ More boilerplate

When to Use Direct Mode

  • Simple read operations (homepage, about page)
  • List/detail views without business logic
  • Public read-only API endpoints
  • Rapid prototyping

When to Use Bus Mode

  • Operations requiring domain events
  • Complex business rules
  • Multi-entity transactions
  • Operations needing middleware (logging, authorization)
  • Write operations with side effects

Examples from Demo Application

Direct Mode: Homepage module displays a simple welcome message.

Bus Mode: Library module handles book CRUD with events and permissions. Loan module manages complex borrowing/return workflows. User module handles authentication with security events.

Best Practices

  • Start Simple: Begin with Direct Mode for unclear requirements, migrate when complexity emerges
  • Module Consistency: Avoid mixing modes within a single module
  • Choose Based on Needs: If events, transactions, or middleware are known upfront, start with Bus Mode

See Also

  • CQRS - Conceptual foundation for Bus Mode