Aggregate и инварианты в Go.

Ответ

Агрегат - граница консистентности; инварианты соблюдаются внутри агрегата. Все изменения через корень агрегата; репозиторий загружает и сохраняет целый агрегат. В Go корень - структура с методами (AddItem, Confirm), проверки инвариантов внутри методов. Не менять вложенные сущности в обход корня. Транзакция при сохранении одного агрегата.

func (o *Order) Confirm() error {
    if o.Status != OrderDraft { return ErrInvalidState }
    o.Status = OrderConfirmed
    return nil
}
🧠Квиз 🏆Лидеры 🎯Собесед. 📖Вопросы 📚База зн.