acknowledging cap at the root in the domain model
play

Acknowledging CAP at the Root -- in the Domain - PowerPoint PPT Presentation

Acknowledging CAP at the Root -- in the Domain Model Eric Evans Domainlanguage.com Twi>er: ericevans0 #dddesign Gap between formalism and


  1. Acknowledging ¡CAP ¡at ¡the ¡Root ¡ -­‑-­‑ ¡in ¡the ¡Domain ¡Model ¡ Eric ¡Evans ¡ Domainlanguage.com ¡ Twi>er: ¡ericevans0 ¡ ¡#dddesign ¡

  2. Gap ¡between ¡formalism ¡and ¡ ¡ ¡pracFce ¡

  3. Vessel ¡Voyage ¡XYZ ¡ OAK 2 4 LGB SHA 1 2 HKG

  4. Vessel ¡Voyage ¡ABC ¡ SEA LGB SNG

  5. Cargo ¡IFnerary ¡ SEA LGB HKG

  6. Our ¡Cargo ¡Needs ¡2 ¡Voyages ¡

  7. Schedules ¡and ¡IFneraries ¡ Voyage ¡Schedule ¡for ¡XYZ ¡ IFnerary ¡HKG-­‑SEA ¡ • ETD ¡HKG ¡08:30 ¡Sa ¡ • HKG-­‑LGB ¡on ¡XYZ ¡ • ETA ¡SHA ¡21:00 ¡Sa ¡ • LGB-­‑ ¡SEA ¡on ¡ABC ¡ • ETD ¡SHA ¡06:30 ¡Su ¡ • ETA ¡LGB ¡13:20 ¡Th ¡ • … ¡ EsFmated ¡Layover ¡in ¡LGB: ¡ Voyage ¡Schedule ¡for ¡ABC ¡ ¡13:20 ¡Th ¡–10:15 ¡Sa ¡ • ETD ¡SNG ¡14:15 ¡Tu ¡ ¡Elapsed: ¡45:55 ¡ • ETA ¡LGB ¡22:05 ¡Fr ¡ • ETD ¡LGB ¡10:15 ¡Sa ¡ • ETA ¡SEA ¡07:40 ¡Su ¡ ¡

  8. Cargo Vessel Voyage cargoId vesselVoyageId Origin assignedVessel ... Destination Arrival Deadline Weight ... Itinerary Schedule startLocation endLocation availableTime layover * * VesselLeg Leg departureLocCode = HKG loadLocation EDT = 8:30 Sa loadTime unloadLocCode = SHA * unloadLocation ETA = 21:00 Sa unloadTime

  9. Schedules ¡and ¡IFneraries ¡ Voyage ¡Schedule ¡for ¡XYZ ¡ IFnerary ¡HKG-­‑SEA ¡ • ETD ¡HKG ¡08:30 ¡Sa ¡ • HKG-­‑LGB ¡on ¡XYZ ¡ • ETA ¡SHA ¡21:00 ¡Sa ¡ • LGB-­‑ ¡SEA ¡on ¡ABC ¡ • ETD ¡SHA ¡06:30 ¡Su ¡ • ETA ¡LGB ¡13:20 ¡Th ¡ • … ¡ EsFmated ¡Layover ¡in ¡LGB: ¡ Voyage ¡Schedule ¡for ¡ABC ¡ ¡13:20 ¡Th ¡–10:15 ¡Sa ¡ • ETD ¡SNG ¡14:15 ¡Tu ¡ ¡Elapsed: ¡45:55 ¡ • ETA ¡LGB ¡22:05 ¡Fr ¡ • ETD ¡LGB ¡10:15 ¡Sa ¡ • ETA ¡SEA ¡07:40 ¡Su ¡ ¡

  10. Delay ¡ Voyage ¡Schedule ¡for ¡XYZ ¡ IFnerary ¡HKG-­‑SEA ¡ • ETD ¡HKG ¡08:30 ¡Sa ¡ • HKG-­‑LGB ¡on ¡XYZ ¡ • ETA ¡SHA ¡21:00 ¡Sa ¡ • LGB-­‑ ¡SEA ¡on ¡ABC ¡ • ETD ¡SHA ¡06:30 ¡Su ¡ • ETA ¡LGB ¡13:20 ¡Th ¡ • … ¡ EsFmated ¡Layover ¡in ¡LGB: ¡ Voyage ¡Schedule ¡for ¡ABC ¡ ¡13:20 ¡Th ¡–10:15 ¡Sa ¡ • ETD ¡SNG ¡14:15 ¡Tu ¡ ¡Elapsed: ¡45:55 ¡ • ETA ¡LGB ¡22:05 ¡Fr ¡ • ETD ¡LGB ¡10:15 ¡Sa ¡ • ETA ¡SEA ¡07:40 ¡Su ¡ ¡

  11. New ¡Schedule ¡ Voyage ¡Schedule ¡for ¡XYZ ¡ IFnerary ¡HKG-­‑SEA ¡ • ETD ¡HKG ¡08:30 ¡Sa ¡ • HKG-­‑LGB ¡on ¡XYZ ¡ • ETA ¡SHA ¡21:00 ¡Sa ¡ • LGB-­‑ ¡SEA ¡on ¡ABC ¡ • ETD ¡SHA ¡06:30 ¡Su ¡ • ETA ¡LGB ¡13:20 ¡Th ¡3:00 ¡Sa ¡(next) ¡ • … ¡ EsFmated ¡Layover ¡in ¡LGB: ¡ Voyage ¡Schedule ¡for ¡ABC ¡ ¡3:00 ¡Sa ¡–10:15 ¡Sa ¡ • ETD ¡SNG ¡14:15 ¡Tu ¡ ¡Elapsed: ¡45:55 ¡ ¡7:15 ¡ • ETA ¡LGB ¡22:05 ¡Fr ¡ • ETD ¡LGB ¡10:15 ¡Sa ¡(next) ¡ • ETA ¡SEA ¡07:40 ¡Su ¡(next) ¡ ¡

  12. Cargo Vessel Voyage cargoId vesselVoyageId Origin assignedVessel ... Destination Arrival Deadline Weight ... Itinerary Schedule startLocation endLocation availableTime layover * * VesselLeg Leg departureLocCode = HKG loadLocation EDT = 8:30 Sa loadTime unloadLocCode = SHA * unloadLocation ETA = 21:00 Sa unloadTime

  13. Some ¡Consistency ¡Rules ¡ • IFnerary ¡corresponds ¡to ¡Vessel ¡Voyage ¡ • IFnerary ¡connected ¡ • Layover ¡> ¡24 ¡hours ¡ ¡ ¡ ¡

  14. Vessel Voyage vesselVoyageId = XYZ Schedule Cargo VesselLeg cargoId = AXB234Q Origin = HKG Destination = SEA departureLocCode = HKG Arrival Deadline = Tue next EDT = 8:30 Sa unloadLocCode = SHA Weight = ... ETA = 21:00 Sa departureLocCode = HKG EDT = 8:30 Mo unloadLocCode = LGB ETA = 13:20 Th departureLocCode = SHA EDT = 6:30 Su unloadLocCode = LGB Itinerary ETA = 13:20 Th startLocationCode= HKG endLocCode = SEA availableTime = 7:40 Su layover = 45:55 Vessel Voyage vesselVoyageId = ABC 1st 2nd Leg Schedule loadLocationCode = HKG loadTime = 8:30 Mo unloadLocCode = LGB unloadTime = 13:20 Th VesselLeg Leg VesselLeg loadLocationCode = LGB departureLocCode = HKG loadTime = 10:15 Sa EDT = 8:30 Mo departureLocCode = LGB unloadLocCode = SEA unloadLocCode = LGB departureLocCode = HKG EDT = 10:15 Sa unloadTime = 7:40 Su ETA = 13:20 Th EDT = 8:30 Mo unloadLocCode = SEA unloadLocCode = LGB VesselLeg ETA = 7:40 Su ETA = 13:20 Th VesselLeg

  15. Vessel Voyage vesselVoyageId = XYZ Schedule Cargo VesselLeg cargoId = AXB234Q Origin = HKG Destination = SEA departureLocCode = HKG Arrival Deadline = Tue next EDT = 8:30 Sa unloadLocCode = SHA Weight = ... ETA = 21:00 Sa departureLocCode = HKG EDT = 8:30 Mo unloadLocCode = LGB ETA = 13:20 Th departureLocCode = SHA EDT = 6:30 Su unloadLocCode = LGB Itinerary ETA = 13:20 Th 3:00 Sa startLocationCode= HKG endLocCode = SEA availableTime = 7:40 Su layover = 45:55 7:15 Vessel Voyage vesselVoyageId = ABC 1st 2nd Leg Schedule loadLocationCode = HKG loadTime = 8:30 Sa unloadLocCode = LGB unloadTime=13:20Th 3:00 Sa VesselLeg Leg VesselLeg loadLocationCode = LGB departureLocCode = HKG loadTime = 10:15 Sa EDT = 8:30 Mo departureLocCode = LGB unloadLocCode = SEA unloadLocCode = LGB departureLocCode = HKG EDT = 10:15 Sa unloadTime = 7:40 Su ETA = 13:20 Th EDT = 8:30 Mo unloadLocCode = SEA unloadLocCode = LGB VesselLeg ETA = 7:40 Su ETA = 13:20 Th VesselLeg

  16. Aggregates ¡

  17. Aggregates: ¡ ¡ Consistency ¡Boundaries ¡ • Aggregates ¡are ¡always ¡internally ¡consistent. ¡ – Invariants ¡apply ¡at ¡every ¡transacFon ¡commit ¡ • Aggregates ¡“eventually ¡consistent” ¡with ¡each ¡ other. ¡ – Asynchronous ¡updates ¡propagate ¡through ¡system ¡ ¡ • Limit ¡Interconnectedness. ¡ – References ¡limited ¡to ¡aggregate ¡roots. ¡

  18. Draw ¡Aggregate ¡Boundaries ¡ Vessel Voyage vesselVoyageId = XYZ Schedule Cargo cargoId = AXB234Q VesselLeg Origin = HKG Destination = SEA departureLocCode = HKG Arrival Deadline = Tue next EDT = 8:30 Sa Weight = ... unloadLocCode = SHA ETA = 21:00 Sa departureLocCode = HKG EDT = 8:30 Mo unloadLocCode = LGB ETA = 13:20 Th departureLocCode = SHA EDT = 6:30 Su unloadLocCode = LGB Itinerary ETA = 13:20 Th startLocationCode= HKG endLocCode = SEA availableTime = 7:40 Su layover = 45:55 Vessel Voyage vesselVoyageId = ABC 1st 2nd Leg Schedule loadLocationCode = HKG loadTime = 8:30 Sa unloadLocCode = LGB unloadTime = 13:20 Th VesselLeg Leg VesselLeg loadLocationCode = LGB departureLocCode = HKG loadTime = 10:15 Sa EDT = 8:30 Mo departureLocCode = LGB unloadLocCode = SEA unloadLocCode = LGB departureLocCode = HKG EDT = 10:15 Sa unloadTime = 7:40 Su ETA = 13:20 Th EDT = 8:30 Mo unloadLocCode = SEA unloadLocCode = LGB VesselLeg ETA = 7:40 Su ETA = 13:20 Th VesselLeg (But probably not these!)

  19. Allowed ¡State ¡ Voyage ¡Schedule ¡for ¡XYZ ¡ IFnerary ¡HKG-­‑SEA ¡ • ETD ¡HKG ¡08:30 ¡Sa ¡ • HKG-­‑LGB ¡on ¡XYZ ¡ • ETA ¡SHA ¡21:00 ¡Sa ¡ • LGB-­‑ ¡SEA ¡on ¡ABC ¡ • ETD ¡SHA ¡06:30 ¡Su ¡ • ETA ¡LGB ¡13:20 ¡Th ¡3:00 ¡Sa ¡(next) ¡ • … ¡ EsFmated ¡Layover ¡in ¡LGB: ¡ Voyage ¡Schedule ¡for ¡ABC ¡ ¡3:00 ¡Sa ¡–10:15 ¡Sa ¡ • ETD ¡SNG ¡14:15 ¡Tu ¡ ¡Elapsed: ¡45:55 ¡ ¡ • ETA ¡LGB ¡22:05 ¡Fr ¡ • ETD ¡LGB ¡10:15 ¡Sa ¡(next) ¡ • ETA ¡SEA ¡07:40 ¡Su ¡(next) ¡ ¡

  20. Vessel Voyage vesselVoyageId = XYZ Schedule Cargo VesselLeg cargoId = AXB234Q Origin = HKG Destination = SEA departureLocCode = HKG Arrival Deadline = Tue next EDT = 8:30 Sa unloadLocCode = SHA Weight = ... ETA = 21:00 Sa departureLocCode = HKG EDT = 8:30 Mo unloadLocCode = LGB ETA = 13:20 Th departureLocCode = SHA EDT = 6:30 Su unloadLocCode = LGB Itinerary ETA = 13:20 Th startLocationCode= HKG endLocCode = SEA availableTime = 7:40 Su layover = 45:55 Vessel Voyage vesselVoyageId = ABC 1st 2nd Leg Schedule loadLocationCode = HKG loadTime = 8:30 Mo unloadLocCode = LGB unloadTime = 13:20 Th VesselLeg Leg VesselLeg loadLocationCode = LGB departureLocCode = HKG loadTime = 10:15 Sa EDT = 8:30 Mo departureLocCode = LGB unloadLocCode = SEA unloadLocCode = LGB departureLocCode = HKG EDT = 10:15 Sa unloadTime = 7:40 Su ETA = 13:20 Th EDT = 8:30 Mo unloadLocCode = SEA unloadLocCode = LGB VesselLeg ETA = 7:40 Su ETA = 13:20 Th VesselLeg

Recommend


More recommend