Bienvenue sur FlowZap, l'application pour créer des diagrammes avec Rapidité, Clarté et Contrôle.

Flux de travail CQRS

patterns

Patron CQRS (Command Query Responsibility Segregation) avec chemins de commande et de requête séparés, publication d'événements de domaine, synchronisation du modèle de lecture et transformation DTO.

Code FlowZap complet

Client { # Client Application
n1: circle label:"Start"
n2: rectangle label:"User initiates action"
n3: diamond label:"Read or write?"
n4: rectangle label:"Send command"
n5: rectangle label:"Send query"
n6: rectangle label:"Receive response"
n7: circle label:"End"
n1.handle(right) -> n2.handle(left)
n2.handle(right) -> n3.handle(left)
n3.handle(right) -> n4.handle(left) [label="Write"]
n3.handle(bottom) -> n5.handle(top) [label="Read"]
n4.handle(bottom) -> CommandSide.n8.handle(top) [label="Command"]
n5.handle(bottom) -> QuerySide.n16.handle(top) [label="Query"]
n6.handle(right) -> n7.handle(left)
}
CommandSide { # Command Side
n8: rectangle label:"Validate command"
n9: diamond label:"Command valid?"
n10: rectangle label:"Execute domain logic"
n11: rectangle label:"Persist to write store"
n12: rectangle label:"Publish domain event"
n13: rectangle label:"Return validation error"
n8.handle(right) -> n9.handle(left)
n9.handle(right) -> n10.handle(left) [label="Yes"]
n9.handle(bottom) -> n13.handle(top) [label="No"]
n10.handle(right) -> n11.handle(left)
n11.handle(right) -> n12.handle(left)
n12.handle(bottom) -> EventHandler.n14.handle(top) [label="Event"]
n12.handle(top) -> Client.n6.handle(bottom) [label="Success"]
n13.handle(top) -> Client.n6.handle(bottom) [label="Error"]
}
EventHandler { # Event Handler
n14: rectangle label:"Receive domain event"
n15: rectangle label:"Update read model"
n14.handle(right) -> n15.handle(left)
n15.handle(top) -> QuerySide.n16.handle(bottom) [label="Sync"]
}
QuerySide { # Query Side
n16: rectangle label:"Parse query parameters"
n17: rectangle label:"Query read store"
n18: rectangle label:"Transform to DTO"
n19: rectangle label:"Return results"
n16.handle(right) -> n17.handle(left)
n17.handle(right) -> n18.handle(left)
n18.handle(right) -> n19.handle(left)
n19.handle(top) -> Client.n6.handle(bottom) [label="Data"]
}

Modèles associés

Workflow du pattern Saga

patterns

Pattern d’orchestration Saga pour transactions distribuées entre les services Commande, Paiement et Expédition avec compensation et retour arrière automatiques en cas d’échec.

Retour à tous les modèles