Overview
The Ordering module implements a complete order management system supporting:- Order creation and modification
- Order lines with quantities and specifications
- Party roles in orders (customer, supplier, etc.)
- Order pricing and arbitrary price adjustments
- Order lifecycle (draft, confirmed, fulfilled, cancelled)
- Fulfillment status tracking
Architecture
Order Structure
Order
Main aggregate representing a customer order:Order
Order Status
Status Lifecycle
Order Line
Individual item in an order:OrderLine
OrderingFacade
Main entry point for order operations:Creating Orders
Create Order
Modifying Orders
Add Order Line
Add Order Line
Remove Order Line
Remove Order Line
Change Quantity
Change Quantity
Set Arbitrary Price
Set Arbitrary Price
Order Lifecycle
Lifecycle Operations
Parties in Orders
Party Roles
RoleInOrder
Party in Order
Snapshot of party information at order time:PartyInOrder
Order Parties
Manages all parties involved in an order:OrderParties
Order Line Specification
Additional specifications for order lines:OrderLineSpecification
Order Line Pricing
Pricing information for order lines:OrderLinePricing
Fulfillment
Tracking order fulfillment:FulfillmentStatus
Order Builder Pattern
Fluent API for building orders:Order Building
Order Services
Integration with external services:Order Services
Order Events
Domain events published by orders:Order Events
Real-World Example: E-commerce Order
Complete Order Flow
Order Queries
OrderingQueries
Order Views
View DTOs
Best Practices
Immutable Lines
Order lines should be value objects, replaced not modified
Party Snapshots
Store party data at order time, don’t reference live data
Price Audit
Always record reason for manual price overrides
Event-Driven
Publish events for order state changes
