Clean Architecture è un approccio alla progettazione di sistemi software complessi che garantisce l'indipendenza della logica di business da framework, database, interfacce utente e altri fattori esterni. La base è la suddivisione del codice in strati, con la possibilità di un'influenza reciproca minima tra di essi.
Nella classica Clean Architecture vediamo strati interni (Use Cases, Entities) e strati esterni (Frameworks, Gateways, Controllers). Lo spostamento delle dipendenze avviene solo verso l'interno (inversione delle dipendenze), il che consente di configurare, modificare e testare i sistemi senza rischiare di compromettere la logica di business critica.
Esempio di codice (in Python):
# Entità class Order: def __init__(self, id, total): self.id = id self.total = total # Caso d'uso class CompleteOrderUseCase: def __init__(self, order_repository): self.order_repository = order_repository def execute(self, order_id): order = self.order_repository.get_by_id(order_id) order.completed = True self.order_repository.save(order)
Caratteristiche principali:
Tutti gli strati della Clean Architecture possono essere implementati come servizi separati?
Non necessariamente. A volte è poco pratico separare ogni strato in un servizio distinto a causa di elevate interconnessioni o overhead nella comunicazione. Gli strati rappresentano una separazione logica; l'isolamento fisico è necessario solo quando giustificato.
È possibile violare la regola della direzionalità delle dipendenze nella Clean Architecture se questo accelera lo sviluppo?
No, poiché anche un breve risparmio di tempo porta a una complicazione del supporto in futuro. La direzionalità delle dipendenze è il principio fondamentale della Clean Architecture e la sua violazione porta alla perdita dei vantaggi strutturali.
Le regole di business devono sempre essere implementate esclusivamente nello strato interno?
Sì, tutte le importanti regole di business devono trovarsi nello strato interno (Entities o Use Cases) affinché la modifica delle dipendenze esterne non influisca sulla logica di business.