Sviluppare software e app con qualitร : dopo il recente articolo in cui illustriamo i principali strumenti utilizzati in Softfour, oggi lasciamo di nuovo la parola al nostro developer Marco Neรจ che ci racconta la sua esperienza e i vantaggi della metodologia Clean Design.
Clean Design: panoramica e principi
Cercando metodi per migliorare la leggibilitร del codice, la modularitร delle componenti e per ridurre il debito tecnico, Marco รจ entrato in contatto con un design pattern che fa largo uso dellโastrazione e della stratificazione del progetto: il Clean Design.
Mettiamo innanzitutto in luce alcuni principi fondamentali del Clean Design:
Dipendenze e Layer: un componente puรฒ dipendere solo da funzionalitร presenti in un Layer piรน โinternoโ dellโapplicazione;
Astrazione: i layer piรน interni dellโapp devono mantenere un alto livello di astrazione rispetto alle funzionalitร , mentre i layer esterni devono implementarle in maniera concreta.
Le 5 SOLID rules:
- Single responsibility: ogni componente deve avere una singola funzionalitร e di conseguenza una singola ragione per essere modificato;
- Open/closed: i componenti devono essere aperti a future estensioni ma โchiusiโ per quanto riguarda modifiche. Lโidea sarebbe quella di creare classi che possono essere estese senza mai toccare il codice preesistente;
- Liskov substitution: prende il nome da Barbara Liskov e si riferisce alla capacitร dellโapplicazione di sostituire ogni istanza di una classe con quella di una sua sottoclasse senza che vi siano differenze di comportamento;
- Interface-segregation principle: una classe client non deve dipendere da metodi che non utilizza, pertanto vanno implementate interfacce specifiche e di piccole dimensioni;
- Dependency inversion: ogni dipendenza va risolta tramite astrazione in modo da disaccoppiare i layer esterni da quelli interni.
Riusabilitร : ogni nuova modifica deve poter essere riutilizzabile allโinterno dellโapp, non sono accettabili fix o modifiche che andranno poi applicate altrove.
Riutilizzo totale delle componenti: ogni modulo deve contenere solo le funzionalitร essenziali. Quando vado ad utilizzare un modulo ne utilizzerรฒ ogni classe e, pertanto, solo classi strettamente legate potranno essere inserite in uno stesso modulo.
Evitare la โdipendenza circolareโ, sfruttando la dependency injection.
Hexagonal Architecture (ports and adapters): ogni layer รจ reso modulare dallโutilizzo di โporteโ (astrazioni). Gli adattatori fanno da collante fra i vari layer o fra i layer ed il mondo esterno interpretando i dati in entrata dalle porte.
TDD (Test Driven Development)
Lโinsieme dei principi alla base della Clean Architecture getta le basi per la realizzazione di app facilmente testabili e questo ci ha fatto muovere nella direzione del Test Driven Development.
Il Modello TDD prevede lo sviluppo di applicazioni seguendo cicli divisi in tre fasi e con la scrittura dei test prima della funzionalitร vera e propria.
Le Fasi del TDD
- Fase rossa โ viene definito un test per la funzionalitร ancora da scrivere. Il test deve essere eseguibile e deve fallire;
- Fase verde โ va definita la prima bozza della funzionalitร . Il codice dovrร limitarsi a passare il test senza pretese di ottimizzazione o leggibilitร . A questo punto il test dovrร passare insieme a tutti gli altri test presenti nel software cosi da mettere in evidenza eventuali ingerenze;
- Refactoring โ a questo punto il programmatore passerร al miglioramento del codice, al termine del quale lancerร nuovamente tutti i test (che dovranno passare).
Invertire il processo di realizzazione del software ci dร un punto di vista diverso e aiuta ad evitare difetti logici nella progettazione dellโapp oltre ad aiutare nella stima dellโavanzamento del progetto.
Approfondimenti e contatti
Per chi desidera approfondire questo mondo, suggeriamo il libro “Clean Architecure” di Robert C. Martin.
Se hai bisogno di un riferimento di qualitร per lo sviluppo software in outsourcing, contattaci senza impegno!