2011-09-01 7 views
5

ho una radice 'Ordine' aggregato, e ha un certo numero di metodi su di esso che ha fissato internamente il suo campo 'Stato':In CQRS, come posso comunicare un elenco di metodi consentiti su un aggregato all'interfaccia utente?

  • Invia
  • mettere in sospeso
  • Take Off Attesa
  • Conferma
  • Annulla
  • ecc

Le azioni disponibili dipendono dallo stato corrente dell'ordine (ad es. non può essere messo in attesa se è già in attesa). Il problema è che ho bisogno di fornire una query per dire all'interfaccia utente quali comandi sono disponibili in modo da poter nascondere le operazioni che altrimenti genererebbero uno InvalidOperationException.

Come si esegue questa operazione con una violazione DRY minima?

risposta

4

La soluzione più semplice è progettare lo stato corrente insieme alle transizioni disponibili per leggere/interrogare il modello e selezionarlo insieme ai dati da visualizzare.

Esempio: PlaceOnHoldCommand risultati in OrderPlacedOnHoldEvent che (oltre ad essere messo in EventStore) è pubblicata e gestiti da OrderTransitionsEventHandler che denormalizes transizioni disponibili a una tabella DB associato con ordine. Il client seleziona le transizioni disponibili e agisce di conseguenza (nasconde i pulsanti o sth non disponibili in quel modo).

Questa è ovviamente una delle opzioni. Non aspettarti comunque che non ci sarà alcuna duplicazione. CQRS aiuta a gestire la complessità ea volte ciò significa che si verificano lievi violazioni di DRY.

+0

+1 - d'accordo. non c'è molto altro da aggiungere - questo è praticamente come lo faresti –

+0

Oh, è solo sexy! Grazie! –

Problemi correlati