La Law of Demeter è una linea guida per lo sviluppo di software, in particolare nella programmazione orientata agli oggetti, che mira a ridurre le dipendenze tra oggetti, rendendo i sistemi più modulari, più facili da mantenere e meno inclini agli insetti.

Comprendere la Legge del Demetra

La Legge di Demeter, spesso riassunta come "solo parlare con i tuoi amici immediati", incoraggia gli oggetti a comunicare solo con i loro collaboratori diretti, il che significa che un oggetto deve solo invocare metodi di:

  • E' lei stessa.
  • Oggetti passati come parametri
  • Oggetti che crea
  • I suoi oggetti di componenti diretti

Aderendo a questa regola, le dipendenze dell'oggetto sono minimizzate, riducendo il rischio di un accoppiamento stretto e rendendo il codice più facile da cambiare o estendere.

Implementare la Legge del Demetra

L'implementazione della Legge di Demeter comporta la progettazione di classi e metodi che non raggiungono profondamente i grafici degli oggetti, ad esempio invece di chiamare:

order.getCustomer().getAddress().getCity()]

È meglio fornire un metodo che restituisce le informazioni necessarie direttamente:

ordine.getCustomerCity()

Consigli di rifattore

  • Incapsulare catene complesse all'interno della classe stessa.
  • Creare metodi che espongono solo i dati necessari.
  • Utilizzare modelli di progettazione come Facade o Mediator per ridurre le dipendenze.
  • Tenere le classi incentrate su una singola responsabilità.

Vantaggi di seguito della legge del Demeter

Aderendo a questa legge offre diversi vantaggi:

  • Riduce l'accoppiamento tra le classi.
  • Migliora la leggibilità del codice e la manutenbilità.
  • Rende più facile il test delle unità isolando gli oggetti.
  • Facilita la rifattore più facile e l'estensione del codice.

In sintesi, l'implementazione della legge di Demeter nel design orientato agli oggetti promuove un codice più pulito e modulare, incoraggia gli sviluppatori a riflettere attentamente sulle interazioni e le dipendenze degli oggetti, portando a sistemi software più robusti.