Hai menzionato entrambi i modelli di design e l'accoppiamento. Questi sono concetti separati, quindi li tratterò separatamente. L'unica vera connessione è che i modelli di design tendono a promuovere un accoppiamento lento (poiché è un aspetto importante del buon design).
Modelli di design
Il concetto di Design Pattern è in realtà piuttosto semplice: sono solo un insieme di modelli su come affrontare vari problemi comuni. Ci sono 2 motivi principali per cui sono popolari:
- Sono "provati": sono stati usati prima molte volte e i vantaggi / inconvenienti di ciascuno sono generalmente noti, in particolare qualsiasi problema sottile che potrebbe causare grossi problemi sono noti.
- Forniscono un insieme comune di terminologia e consentono quindi una comunicazione più semplice. Se qualcuno dice "la classe X interpreta il ruolo dell'osservatore nello schema dell'osservatore", gli sviluppatori che hanno familiarità con lo schema possono immediatamente capire cosa sta succedendo.
Come fai a sapere di averlo implementato correttamente? È difficile. Per la maggior parte dei modelli è semplice: lo hai fatto o no. Alcuni modelli sono meno definiti di altri - ad es. model-view-controller . Modelli come questo sono meglio usati come linee guida generali. Le specifiche del modo in cui lo implementate sono meno importanti della comprensione dei motivi per cui il modello esiste e di ciò che è destinato a realizzare.
I modelli di progettazione non sono "l'unico vero modo". Spesso dovrai o adattarli per i tuoi scopi specifici, o talvolta non ci saranno modelli adatti ai requisiti. Costringere un modello di progettazione in cui non si adatta è una cattiva idea; è come usare un buon martello quando quello che vuoi è un cacciavite.
Accoppiamento
Questa è un'idea davvero importante nell'informatica. Poiché i requisiti per la maggior parte dei progetti software cambiano nel tempo (a volte in modo significativo), la capacità di un progetto di far fronte alle modifiche è importante. L'accoppiamento è fondamentalmente la misura di "quanto sarebbe difficile scambiare questo componente con un altro?" Il "componente" potrebbe essere un metodo, una classe, un pacchetto, una libreria, ecc.
Esistono vari tipi di accoppiamenti elencati in questo articolo di Wikipedia .