Skip to main content

Module aggregate

Module aggregate 

Source
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§

AggregateMetadata
Helper struct for tracking aggregate metadata.

Traits§

AggregateRoot
DDD Aggregate Root trait.
EventSourcedAggregate
Extension trait for aggregates that support event sourcing.
InvariantAggregate
Trait for aggregates that enforce invariants.