venerdì 11 settembre 2015

Aveva ragione mia madre... quando esci dalla "port" indossa un "adapter"

a volte capita di dover importare nel nostro codice delle librerie esterne.

In .NET è semplicissimo, basta importare un pacchetto nuget e il gioco è fatto.

Il rovescio della medaglia è che in questo modo capita di utilizzare direttamente gli oggetti e i metodi che la libreria espone e ci si lega mani e piedi a questa.

Questo vuol dire che se in futuro volessimo utilizzare una nuova libreria o la stessa modificasse o deprecasse le sue chiamate dovremmo intervenire direttamente nel nostro codice magari in "n" punti diversi, inoltre andiamo a creare delle dipendenze e il nostro codice diventa intestabile.

Meglio sarebbe ascoltare i consigli di coloro che ci sono già passati e ne sanno più di noi... mia madre mi diceva sempre di mettermi una maglia di lana quando uscivo e faceva freddo... avrei dovuto ascoltarla più spesso :-)
in particolare l'architettura esagonale o detta "port and adapters" di Cockburn (1) ci dice di disaccopiare tutto ciò che è esterno dal nostro codice e anche il "Dependency inversion principle" di SOLID (2) ci consiglia di non dipendere dalle implementazioni.

Cosa fare quindi?

1. Bisogna creare una nuova interfaccia che espone il metodo che ci serve
2. Implementare l'interfaccia
3. implementare il metodo che ci serve utilizzando la libreria scelta

Questo ci permette di cambiare facilmente libreria, basta creare un nuovo adapter (3) verso la nuova libreria scelta.

Questo permette anche di sostituire la libreria con un mock che estende la nostra interfaccia e testare quindi il nostro codice.

1) http://alistair.cockburn.us/Hexagonal+architecture
2) https://www.wikiwand.com/it/SOLID
3) http://dotnetcodr.com/2013/04/25/design-patterns-and-practices-in-net-the-adapter-pattern/
4) https://www.wikiwand.com/it/Domain-driven_design