Dove assegnare una responsabilità, per evitare l'accoppiamento diretto tra due (o più) elementi?
Come disaccoppiare degli oggetti in modo da sostenere un accoppiamento basso e mantenere alto il potenziale di riuso?
La soluzione è assegnare la responsabilità ad un oggetto intermediario per mediare tra altri componenti o servizi, in modo che non si un accoppiamento diretto tra di essi.
L'intermediario crea una indirezione tra gli altri componenti.
Gli oggetti IAccountingAdapter agiscono da intermediari tra gli oggetti dello strato del dominio e i servizi esterni per la contabilità.
L'adapter è un adattatore tra l'interfaccia esterna del servizio usato, ma è anche un mediatore poiché fa si che gli oggetti interni possano comunicare con quelli di quel servizio e inoltre, se eventualmente dovesse cambiare il servizio esterno, basterebbe adattare tale intermediario a tali modifiche.
L'esempio che abbiamo visto in Pure Fabrication, per consentire il salvataggio in un database di una Sale, è un esempio di disaccoppiamento della Sale dai servizi per la base di dati, attraverso l'introduzione di una classe inventata.
Lo stesso vale per Cup per il lancio dei dadi in Monopoly.
Pure Fabrication | Indirection |
---|---|
In pure fabrication viene create una classe che non fa parte del dominio: una classe inventata che serve per evitare perdere la coesione di una classe. | In indirection avviene l'aggiunta di un livello per isolare il modello di dominio (l'interno) e rendere flessibile un'operazione. |