This document contains the Event Storming artifacts and domain model diagrams for the Library system.
- Event Storming Legend
- Big Picture Event Storming
- Process Level: Borrowing Flow
- Process Level: Return Flow
- Process Level: Hold Flow
- Aggregate Diagrams
- Domain Model Diagram
- Context Map Diagram
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β EVENT STORMING COLORS β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β ββββββββββββββββ β
β β ORANGE β DOMAIN EVENT β
β β β Something that happened (past tense) β
β β BookBorrowed β "BookBorrowed", "FineIssued" β
β ββββββββββββββββ β
β β
β ββββββββββββββββ β
β β BLUE β COMMAND β
β β β Action that triggers event (imperative) β
β β Borrow Book β "Borrow Book", "Return Book" β
β ββββββββββββββββ β
β β
β ββββββββββββββββ β
β β YELLOW β AGGREGATE β
β β β Entity cluster that processes command β
β β Loan β "Book", "Loan", "Patron" β
β ββββββββββββββββ β
β β
β ββββββββββββββββ β
β β PURPLE β POLICY / PROCESS MANAGER β
β β β "When X happens, do Y" β
β β When overdueβ Reactive business logic β
β β issue fine β β
β ββββββββββββββββ β
β β
β ββββββββββββββββ β
β β PINK β EXTERNAL SYSTEM β
β β β Outside the domain boundary β
β β Stripe β "Payment Gateway", "Email Service" β
β ββββββββββββββββ β
β β
β ββββββββββββββββ β
β β GREEN β READ MODEL / QUERY β
β β β Data needed to make decisions β
β β Patron β "Available Books", "Patron Status" β
β β Profile β β
β ββββββββββββββββ β
β β
β ββββββββββββββββ β
β β RED β HOT SPOT / PROBLEM β
β β β Needs clarification or has conflict β
β β ? β Questions, disagreements β
β ββββββββββββββββ β
β β
β β ACTOR β
β /|\ Person or system initiating action β
β / \ "Patron", "Librarian", "System" β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β LIBRARY DOMAIN - BIG PICTURE β
β β
β TIME βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββΆ β
β β
β βββββββββββββββ β
β β ACQUISITION β β
β βββββββββββββββ β
β β β
β βΌ β
β βββββββββββββ βββββββββββββ βββββββββββββ β
β β Book β β Book β β Book β β
β β Ordered ββββΆβ Received ββββΆβ Added β β
β β β β β βto Catalog β β
β βββββββββββββ βββββββββββββ βββββββ¬ββββββ β
β β β
β β β β β β β β β β β β β β β β β β β βββ β β β β β β β β β β β β β β β β β β β β β β
β βββββββββββββββ β β
β β PATRON β β β
β βββββββββββββββ β β
β β β β
β βΌ β β
β βββββββββββββ βββββββββββββ β β
β β Patron β β Patron β β β
β βRegistered ββββΆβ Verified β β β
β β β β β β β
β βββββββ¬ββββββ βββββββββββββ β β
β β β β
β β β β βΌ β β β β β β β β β β β β β β βββ β β β β β β β β β β β β β β β β β β β β β β
β βββββββ΄ββββββββ β β
β β LENDING βββββββββββββββββββββββββ β
β βββββββββββββββ β
β β β
β βΌ β
β βββββββββββββ βββββββββββββ βββββββββββββ βββββββββββββ βββββββββββββ β
β β Book β β Loan β β Loan β β Loan β β Book β β
β β Borrowed ββββΆβ Active ββββΆβ Became ββββΆβ Renewed ββββΆβ Returned β β
β β β β β β Overdue β β OR β β β β
β βββββββββββββ βββββββββββββ βββββββ¬ββββββ βββββββββββββ βββββββ¬ββββββ β
β β β β
β β β β β β β β β β β β β β β β β β β βββ β β β β β β β β β β β β β βββ β β β β β β β
β βββββββββββββββ β β β
β β FINES βββββββββββββββββββββββββ΄ββββββββββββββββββββββββββββββββ β
β βββββββββββββββ β
β β β
β βΌ β
β βββββββββββββ βββββββββββββ βββββββββββββ βββββββββββββ β
β β Fine β β Patron β β Fine β β Patron β β
β β Issued ββββΆβ Suspended ββββΆβ Paid ββββΆβReinstated β β
β β β β β β β β β β
β βββββββββββββ βββββββββββββ βββββββββββββ βββββββββββββ β
β β
β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β
β βββββββββββββββ β
β β HOLDS β β
β βββββββββββββββ β
β β β
β βΌ β
β βββββββββββββ βββββββββββββ βββββββββββββ βββββββββββββ β
β β Hold β β Hold β β Hold β β Hold β β
β β Placed ββββΆβReady for ββββΆβ Fulfilled β β Expired β β
β β β β Pickup β β OR β β OR β β
β βββββββββββββ βββββββββββββ βββββββββββββ βββββββββββββ β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β BORROW BOOK PROCESS β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β β β
β /|\ Patron β
β / \ β
β β β
β β wants to borrow β
β βΌ β
β ββββββββββββββββ β
β β β β
β β Borrow Book β ββββββββ COMMAND β
β β β β
β ββββββββ¬ββββββββ β
β β β
β β needs β
β βΌ β
β ββββββββββββββββ ββββββββββββββββ ββββββββββββββββ β
β β Patron β β Book β β Patron β β
β β Status β β Availability β β Loans β ββββ READ MODELS β
β β (active?) β β (in stock?) β β (< max?) β β
β ββββββββββββββββ ββββββββββββββββ ββββββββββββββββ β
β β β β β
β βββββββββββββββββββββ΄ββββββββββββββββββββ β
β β β
β βΌ β
β ββββββββββββββββ β
β β β β
β β Loan β ββββββββ AGGREGATE β
β β β β
β ββββββββ¬ββββββββ β
β β β
β β produces β
β βΌ β
β ββββββββββββββββ β
β β β β
β βBookBorrowed β ββββββββ DOMAIN EVENT β
β β β β
β ββββββββ¬ββββββββ β
β β β
β ββββββββββββββΌβββββββββββββ β
β β β β β
β βΌ βΌ βΌ β
β ββββββββββββββ ββββββββββββββ ββββββββββββββ β
β β Update β β Send β β Fulfill β β
β β Book β β Email β β Hold β ββββ POLICIES β
β βAvailabilityβ βNotificationβ β (if any) β β
β ββββββββββββββ βββββββ¬βββββββ ββββββββββββββ β
β β β
β βΌ β
β ββββββββββββββ β
β β SendGrid β ββββββββ EXTERNAL SYSTEM β
β β β β
β ββββββββββββββ β
β β
β BUSINESS RULES: β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β’ Patron must be ACTIVE (not suspended) β
β β’ Book must be AVAILABLE β
β β’ Patron current loans < borrowing limit β
β β’ Loan period: 14 days (standard), 30 days (researcher) β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β RETURN BOOK PROCESS β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β β β
β /|\ Patron β
β / \ β
β β β
β β returns book β
β βΌ β
β ββββββββββββββββ β
β β β β
β β Return Book β ββββββββ COMMAND β
β β β β
β ββββββββ¬ββββββββ β
β β β
β β needs β
β βΌ β
β ββββββββββββββββ ββββββββββββββββ β
β β Loan β β Current β β
β β Details β β Date β ββββββββ READ MODELS β
β β β β β β
β ββββββββββββββββ ββββββββββββββββ β
β β β β
β βββββββββββ¬ββββββββββ β
β β β
β βΌ β
β ββββββββββββββββ β
β β β β
β β Loan β ββββββββ AGGREGATE β
β β β β
β ββββββββ¬ββββββββ β
β β β
β β produces β
β βΌ β
β ββββββββββββββββ β
β β β β
β βBookReturned β ββββββββ DOMAIN EVENT β
β β{wasOverdue} β β
β ββββββββ¬ββββββββ β
β β β
β βββββββββββββ΄ββββββββββββ β
β β β β
β βΌ βΌ β
β ββββββββββββββββ βββββββββββββββββββββββββββ β
β β Update β β When wasOverdue β β
β β Book β β βββββββββββββββββ β β
β β Availability β β β ββββ POLICY β
β ββββββββββββββββ β ββββββββββββββββββββ β β
β β β β Calculate Fine β β β
β β β β β β β
β βΌ β ββββββββββ¬βββββββββββ β β
β ββββββββββββββββ β β β β
β β Notify β β βΌ β β
β β Next Patron β β ββββββββββββββββββββ β β
β β in Hold Q β β β Fine β β ββββ AGGREGATE β
β ββββββββββββββββ β β β β β
β β ββββββββββ¬βββββββββββ β β
β β β β β
β β βΌ β β
β β ββββββββββββββββββββ β β
β β β FineIssued β β ββββ EVENT β
β β β β β β
β β ββββββββββββββββββββ β β
β βββββββββββββββββββββββββββ β
β β
β BUSINESS RULES: β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β’ Fine = $0.25/day overdue (books), $1.00/day (DVDs) β
β β’ Maximum fine capped at item replacement cost β
β β’ If total fines > $25, suspend patron β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β HOLD BOOK PROCESS β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β PLACE HOLD β
β ββββββββββ β
β β β
β /|\ Patron β
β / \ β
β β β
β βΌ β
β ββββββββββββββ ββββββββββββββ ββββββββββββββ β
β β Place ββββββΆβ Hold ββββββΆβ Hold β β
β β Hold β β β β Placed β β
β ββββββββββββββ ββββββββββββββ ββββββββββββββ β
β COMMAND AGGREGATE EVENT β
β β
β β
β WHEN BOOK RETURNED (Policy) β
β ββββββββββββββββββββββββββββ β
β β
β ββββββββββββββ β
β β Book β β
β β Returned β β
β βββββββ¬βββββββ β
β β β
β βΌ β
β ββββββββββββββββββββββββββββ β
β β Check Hold Queue β β
β β ββββββββββββββββββ β β
β β Is there a hold β β
β β for this book? β β
β ββββββββββββββ¬ββββββββββββββ β
β β β
β βββββββββ΄ββββββββ β
β β β β
β YES NO β
β β β β
β βΌ βΌ β
β ββββββββββββ ββββββββββββ β
β β Notify β β Mark β β
β β Patron β βAvailable β β
β ββββββ¬ββββββ ββββββββββββ β
β β β
β βΌ β
β ββββββββββββββββ β
β β HoldReady β β
β β ForPickup β β
β ββββββββββββββββ β
β EVENT β
β β
β β
β HOLD EXPIRATION (Scheduled Policy) β
β ββββββββββββββββββββββββββββββββββ β
β β
β ββββββββββββββ ββββββββββββββ ββββββββββββββ β
β β Daily ββββββΆβ Check ββββββΆβ Hold β β
β β Scheduler β β Expiry β β Expired β β
β ββββββββββββββ ββββββββββββββ ββββββββββββββ β
β β β
β βΌ β
β ββββββββββββββ β
β β Notify β β
β β Next in β β
β β Queue β β
β ββββββββββββββ β
β β
β BUSINESS RULES: β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β’ Hold pickup window: 7 days β
β β’ Maximum holds per patron: 10 β
β β’ Hold queue: FIFO (first come, first served) β
β β’ Patron notified via email when hold is ready β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β BOOK AGGREGATE β
β (Catalog Context) β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β Book (Aggregate Root) β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€ β
β β - id: BookId β β
β β - title: Title β β
β β - author: Author β β
β β - isbn: ISBN (optional) β β
β β - publisher: String β β
β β - publicationYear: Int β β
β β - subjects: List<Subject> β β
β β - description: String β β
β β - version: Int β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€ β
β β + addToCatalog() β β
β β + updateDetails(...) β β
β β + removeFromCatalog(reason) β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β β
β βββββββββββββββββΌββββββββββββββββ β
β β β β β
β βΌ βΌ βΌ β
β βββββββββββββββ βββββββββββββββ βββββββββββββββ β
β β BookId β β Title β β Author β β
β β (Value) β β (Value) β β (Value) β β
β βββββββββββββββ€ βββββββββββββββ€ βββββββββββββββ€ β
β β value: UUID β β value: Str β β value: Str β β
β βββββββββββββββ βββββββββββββββ βββββββββββββββ β
β β
β INVARIANTS: β
β β’ Title cannot be empty β
β β’ Author cannot be empty β
β β’ ISBN must be valid format (10 or 13 digits) if provided β
β β
β EVENTS PRODUCED: β
β β’ BookAddedToCatalog β
β β’ BookDetailsUpdated β
β β’ BookRemovedFromCatalog β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β LOAN AGGREGATE β
β (Lending Context) β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β Loan (Aggregate Root) β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€ β
β β - id: LoanId β β
β β - bookId: BookId (reference) β β
β β - patronId: PatronId (reference) β β
β β - borrowedAt: DateTime β β
β β - dueDate: DateTime β β
β β - returnedAt: DateTime (optional) β β
β β - renewalCount: Int β β
β β - status: LoanStatus β β
β β - version: Int β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€ β
β β + create(bookId, patronId, loanPeriod) β β
β β + renew(): Result β β
β β + markOverdue() β β
β β + return(): DaysOverdue β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β β
β βββββββββββββββββΌββββββββββββββββ β
β β β β β
β βΌ βΌ βΌ β
β βββββββββββββββ βββββββββββββββ βββββββββββββββ β
β β LoanId β β LoanPeriod β β LoanStatus β β
β β (Value) β β (Value) β β (Enum) β β
β βββββββββββββββ€ βββββββββββββββ€ βββββββββββββββ€ β
β β value: UUID β β days: Int β β ACTIVE β β
β βββββββββββββββ βββββββββββββββ β OVERDUE β β
β β RETURNED β β
β βββββββββββββββ β
β β
β INVARIANTS: β
β β’ Cannot renew if status is RETURNED β
β β’ Cannot renew more than 3 times β
β β’ Cannot renew if holds exist for this book β
β β’ DueDate must be after BorrowedAt β
β β
β EVENTS PRODUCED: β
β β’ BookBorrowed β
β β’ LoanRenewed β
β β’ LoanBecameOverdue β
β β’ BookReturned β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β PATRON AGGREGATE β
β (Patron Context) β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β Patron (Aggregate Root) β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€ β
β β - id: PatronId β β
β β - name: Name β β
β β - email: EmailAddress β β
β β - membershipTier: MembershipTier β β
β β - status: PatronStatus β β
β β - contactInfo: ContactInfo β β
β β - registeredAt: DateTime β β
β β - version: Int β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€ β
β β + register(name, email, tier) β β
β β + suspend(reason) β β
β β + reinstate() β β
β β + upgradeTier(newTier) β β
β β + getBorrowingLimit(): Int β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β β
β βββββββββββββββββΌββββββββββββββββ β
β β β β β
β βΌ βΌ βΌ β
β βββββββββββββββ βββββββββββββββ βββββββββββββββ β
β βMembershipTier βEmailAddress β βPatronStatus β β
β β (Enum) β β (Value) β β (Enum) β β
β βββββββββββββββ€ βββββββββββββββ€ βββββββββββββββ€ β
β β STANDARD β β value: Str β β ACTIVE β β
β β PREMIUM β β β β SUSPENDED β β
β β RESEARCHER β β validate() β β EXPIRED β β
β βββββββββββββββ βββββββββββββββ βββββββββββββββ β
β β
β BORROWING LIMITS BY TIER: β
β β’ STANDARD: 5 books, 14-day loan β
β β’ PREMIUM: 10 books, 21-day loan β
β β’ RESEARCHER: 20 books, 30-day loan β
β β
β EVENTS PRODUCED: β
β β’ PatronRegistered β
β β’ PatronSuspended β
β β’ PatronReinstated β
β β’ MembershipTierChanged β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β LIBRARY DOMAIN MODEL β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β CATALOG CONTEXT β β
β β ββββββββββββββββββββ β β
β β β Book β β β
β β β Β«aggregateΒ» β β β
β β ββββββββββββββββββββ€ β β
β β β id: BookId β β β
β β β title: Title β β β
β β β author: Author β β β
β β β isbn: ISBN β β β
β β ββββββββββββββββββββ β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β β
β β BookAddedToCatalog β
β βΌ β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β LENDING CONTEXT β β
β β β β
β β ββββββββββββββββββββ ββββββββββββββββββββ β β
β β β LoanableBook β β Loan β β β
β β β Β«entityΒ» βββββββββββ Β«aggregateΒ» β β β
β β ββββββββββββββββββββ€ 0..* ββββββββββββββββββββ€ β β
β β β catalogBookId β β id: LoanId β β β
β β β isAvailable β β bookId β β β
β β β holdQueue β β patronId β β β
β β ββββββββββββββββββββ β borrowedAt β β β
β β β β dueDate β β β
β β β 0..* β status β β β
β β βΌ ββββββββββββββββββββ β β
β β ββββββββββββββββββββ β β β
β β β Hold β β β β
β β β Β«aggregateΒ» β β BookBorrowed β β
β β ββββββββββββββββββββ€ β BookReturned β β
β β β id: HoldId β β LoanBecameOverdue β β
β β β patronId β βΌ β β
β β β bookId β β β
β β β status β β β
β β ββββββββββββββββββββ β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β β
β β LoanBecameOverdue β
β βΌ β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β FINES CONTEXT β β
β β β β
β β ββββββββββββββββββββ ββββββββββββββββββββ β β
β β β Fine β β Payment β β β
β β β Β«aggregateΒ» ββββββββββΆβ Β«entityΒ» β β β
β β ββββββββββββββββββββ€ 0..* ββββββββββββββββββββ€ β β
β β β id: FineId β β id: PaymentId β β β
β β β loanId β β amount: Money β β β
β β β patronId β β paidAt β β β
β β β amount: Money β β method β β β
β β β status β ββββββββββββββββββββ β β
β β ββββββββββββββββββββ β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β PATRON CONTEXT β β
β β ββββββββββββββββββββ β β
β β β Patron β β β
β β β Β«aggregateΒ» β β β
β β ββββββββββββββββββββ€ β β
β β β id: PatronId β β β
β β β name β β β
β β β email β β β
β β β membershipTier β β β
β β β status β β β
β β β borrowingLimit β β β
β β ββββββββββββββββββββ β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β CONTEXT MAP β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β βββββββββββββββββββββββ β
β β SHARED KERNEL β β
β β βββββββββββββββββ β β
β β β’ AggregateRoot β β
β β β’ DomainEvent β β
β β β’ Money β β
β β β’ EmailAddress β β
β ββββββββββββ¬βββββββββββ β
β β β
β βββββββββββββββββββββββββββΌββββββββββββββββββββββββββ β
β β β β β
β βΌ βΌ βΌ β
β βββββββββββββββββ βββββββββββββββββ βββββββββββββββββ β
β β CATALOG β β PATRON β β LENDING β β
β β CONTEXT β β CONTEXT β β CONTEXT β β
β β β β β β β β
β β Team: 3 devs β β Team: 2 devs β β Team: 5 devs β β
β β β β β β (CORE) β β
β βββββββββ¬ββββββββ βββββββββ¬ββββββββ βββββββββ¬ββββββββ β
β β β β β
β β β β β
β β Published β Customer β β
β β Language β Supplier β β
β β β β β β β
β β βΌ βΌ β β β
β β βββββββββββββββββββββββ β β β
β βββββΆβ LENDING ββββββ β β
β β CONTEXT β β β
β β β β β
β β Subscribes to: β β β
β β β’ BookAddedToCatalog β β
β β β β β
β β Queries: β β β
β β β’ PatronBorrowProfile β β
β ββββββββββββ¬βββββββββββ β β
β β β β
β β Customer-Supplier β β
β β (Events) β β
β β β β
β βΌ β β
β βββββββββββββββββββββββ β β
β β FINES β β β
β β CONTEXT β β β
β β β β β
β β Subscribes to: β β β
β β β’ LoanBecameOverdueβ β β
β β β’ BookReturned β β β
β ββββββββββββ¬βββββββββββ β β
β β β β
β β ACL β β
β β β β
β βΌ β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β EXTERNAL SYSTEMS β β
β β β β
β β ββββββββββββββ ββββββββββββββ ββββββββββββββ ββββββββββββββ β β
β β β Payment β β Email β β Identity β β Search β β β
β β β Gateway β β Service β β Provider β β Engine β β β
β β β (Stripe) β β (SendGrid) β β (Auth0) β β(Elasticsearch) β β
β β ββββββββββββββ ββββββββββββββ ββββββββββββββ ββββββββββββββ β β
β β β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β LEGEND: β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β ββββββΆ Published Language (documented events/API) β
β β β ββΆ Customer-Supplier (downstream depends on upstream) β
β βββββββΆ ACL (translation layer to external system) β
β [SK] Shared Kernel (shared code ownership) β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
| Artifact | Purpose | Created |
|---|---|---|
| Domain Events List | All events in the system | β |
| Event Timeline | Temporal flow of events | β |
| Process Flows | Command β Aggregate β Event | β |
| Aggregate Diagrams | Internal structure + invariants | β |
| Domain Model | Relationships between aggregates | β |
| Context Map | Bounded context relationships | β |
| Ubiquitous Language | Glossary of terms | β (separate doc) |
- Onboarding: New team members read through to understand the domain
- Design Sessions: Reference during feature planning
- Code Reviews: Verify implementation matches model
- Refactoring: Identify where boundaries should change
- Communication: Share with stakeholders to validate understanding