Chiamate di metodo lunghe concatenate contenute in un'istruzione if mostrata su un diagramma di sequenza

3

Ti stai chiedendo se c'è un buon modo per farlo? Attualmente sto eseguendo le chiamate al metodo come se stessero accadendo prima del blocco condizionale, quindi confrontando quale sarebbe il risultato in "[isDoable == true]" con isDoable che è il risultato della chiamata al metodo a catena lunga. Un esempio della chiamata al metodo contenuta all'interno di if avrebbe un aspetto simile a questo.

if(object.getObjectType().getPossibleAction().isDoable(action))...

Mi rendo conto che è un po 'astratto, ma qualsiasi aiuto sarebbe molto apprezzato.

    
posta mccal99 04.04.2017 - 05:14
fonte

2 risposte

4

Se questa è una buona idea o meno dipende dal livello di dettaglio che vuoi mostrare nel tuo diagramma e da ciò che il lettore si aspetta. Anche se fai MDD o meno.

La maggior parte degli strumenti UML come Magic Draw o Enterprise Architect ti permettono di definire una condizione astratta (visualizzata) e di inserire la condizione reale sotto forma di frammenti di codice o pseudo codice in alcune solite proprietà non visibili.

Preferisco lo stile astratto come [isDoable == true] . Per me è più facile da leggere. Se ho bisogno di maggiori dettagli devo cercare da qualche altra parte (come la proprietà snippet di codice)

Btw. Potresti dover pensare se non sarebbe una buona idea chiedere direttamente all'oggetto se un'azione è fattibile piuttosto che esporre la struttura interna degli oggetti tramite la catena di chiamate. Ad esempio object.isDoable(action)

Vedi Law of Demeter

Vedi anche IBM UML Nozioni di base: Sequence Diagram

    
risposta data 04.04.2017 - 08:17
fonte
2

Suggerirei di inserire IsDoable () nell'interfaccia o nell'oggetto e quindi fornire l'azione per il controllo come parametro. Se action è un'istanza di una classe Action, dovrebbe essere facile utilizzare un IsDoable (Action myAction) sovraccarico che include una chiamata a getPossibleAction (). Quindi, la linea diventerebbe: if(object.isDoable(action))

Oppure puoi modificarlo in modo che l'azione non debba essere dichiarata in anticipo: if(object.isDoable(object.getObjectType().getPossibleAction())

Se sottoclassi "oggetto" correttamente (quindi puoi usare il valore da .GetObjectType () e chiamiamo questo childObject) e il linguaggio lo consente, dovresti essere in grado di fare if(childObject.isDoable(childObject.getPossibleAction())

Devo notare che, se stai creando l'azione prima di verificare se è fattibile, potresti volerlo ripensare. Di solito è meglio determinare quali azioni sono fattibili e poi crearle. Ma ci sono anche molti scenari in cui l'unico modo per determinare la capacità di fare è vedere quale sarebbe il risultato, o per confrontare l'azione con un oggetto che contiene il set di regole (che è utile quando ci sono più set di regole che possono essere usato - come le diverse varianti che i casinò hanno per un singolo gioco di carte). Quindi il tuo ordine delle operazioni potrebbe essere perfettamente valido.

    
risposta data 04.04.2017 - 17:15
fonte