Voglio modellare uno scambio di messaggi di richiesta-risposta asincrono in UML.
La richiesta viene inviata da un client a un server. Il server risponde in modo asincrono.
Questo può essere modellato in un modello di componente in due modi:
Opzione 1
Larichiestaelarispostasonodueinterfaccedifferenticonunmetodociascuno.Ilserverforniscel'interfacciadirichiestamentreilclientforniscel'interfacciadirisposta.Leinterfaccesonorichiesteviceversa.InUMLmodellereiilservereilclientcomecomponenticonunaportaciascuno.Entrambeleporteespongonodueinterfacce:unafornitaeunarichiestachesonocollegatedaclientaserver(richiesta)edaserveraclient(risposta).
Opzione2
Larichiestaelarispostasonoun'interfacciaconunmetodo.Larispostaèsemplicementeilvalorediritornodiquestometodo.Ilserverfornisceeilclientrichiedequestainterfaccia.Loscambiodimessaggièmodellatocomecollegamentodalclientalserver.
Pensochel'opzione(1)siapiùappropriatapergliscambiasincronimentrel'opzione(2)èilmodopreferitoperquellisincroni.Tuttavia,fareunadistinzionedelgenereesporrebbeundettaglionelmodellodelcomponentecheeffettivamenteappartieneaidiagrammicomportamentali.
- Esisteunostandardouna"best practice" per modellare uno scambio di messaggi asincroni nei modelli di componenti?
- Se l'opzione (2) è il modo "giusto" per farlo: come si dovrebbe specificare che il cliente deve rispettare un contratto di interfaccia per ricevere una risposta?