Expand description
DDD Aggregate Root Pattern
Provides traits for implementing Aggregate Roots in Domain-Driven Design. Aggregate Roots are the entry point to a cluster of domain objects and are responsible for maintaining invariants.
§Example
ⓘ
use backbone_core::{AggregateRoot, PersistentEntity};
#[derive(Clone)]
pub struct Order {
id: String,
items: Vec<OrderItem>,
status: OrderStatus,
events: Vec<OrderEvent>,
// ... other fields
}
impl AggregateRoot for Order {
type Event = OrderEvent;
fn uncommitted_events(&self) -> &[Self::Event] {
&self.events
}
fn clear_events(&mut self) {
self.events.clear();
}
fn apply_event(&mut self, event: Self::Event) {
match event {
OrderEvent::ItemAdded { item } => self.items.push(item),
OrderEvent::Confirmed => self.status = OrderStatus::Confirmed,
// ...
}
self.events.push(event);
}
}Structs§
- Aggregate
Metadata - Helper struct for tracking aggregate metadata.
Traits§
- Aggregate
Root - DDD Aggregate Root trait.
- Event
Sourced Aggregate - Extension trait for aggregates that support event sourcing.
- Invariant
Aggregate - Trait for aggregates that enforce invariants.