Accoppiamento, semplificato
Quando un oggetto chiama un metodo, una proprietà, ecc. di un altro oggetto, diciamo che gli oggetti sono accoppiati. Lo chiamiamo accoppiamento perché ora callee non può cambiare qualsiasi del proprio metodo / oggetto. w.out rompendo il chiamante .
Quindi, più l'accoppiamento - metodi, oggetti di scena. - più difficile è modificare il codice callee senza rompere tutto il codice che lo utilizza.
contemplando l'accoppiamento
- Facendo riferimento anche a un singolo puntello., il metodo accoppia due oggetti.
- Ovviamente l'accoppiamento è necessario per la creazione di software.
- Data la natura di "blocco del passo" dell'accoppiamento, vogliamo sia limitarlo che isolarlo. Questo obiettivo si accompagna semplicemente allo sviluppo di software generici. principi.
- Meno oggetti dobbiamo parlare, più basso è l'accoppiamento.
- Se devo fare, diciamo, 20 diverse chiamate di metodo, l'accoppiamento è più basso se tutte e 20 le chiamate sono relative a una classe / oggetto, viceversa quegli stessi metodi si diffondono su più classi / oggetti.
La maggior parte delle Conoscenze causa un accoppiamento pazzo
Qui abbiamo un Employee
che ha un Person
che ha un 'Indirizzo'
public class Employee {
public Person me = new Person();
}
public class Person {
public Address home = new Address();
}
public class Address {
public string street;
}
Per ottenere la strada devo chiamare: myEmployee.me.home.street
. Questo è di 180 gradi opposto al principio della conoscenza minima. Devo sapere sugli interni, la struttura composita, delle classi Employee
, Person
e Address
.
Questo design di classe difettoso mi obbliga a sapere su tutte quelle classi e quindi myEmployee.me.home.street
mi accoppia (l'oggetto chiamante) a non meno di 3 classi - per ottenere solo una singola proprietà!
Minima conoscenza salva il giorno
Se parlo solo con la classe Employee
sto applicando di per sé il minimo principio di conoscenza, e così facendo accoppiamo automaticamente limit solo a quella classe, e allo stesso tempo isolare accoppiando a quella classe.
Aggiungendo tutte le proprietà necessarie nella classe Employee
, risolviamo l'accoppiamento.
così
public class Employee {
public Person me = new Person();
public string street { return me.home.street; }
}
Mi consente di chiamare: myEmployee.street
-
- I "so" solo
Employee
- Sono abbinato solo a
Employee
- non importa quanto sia complessa la sua struttura.
Least Knowledge in fondo
Abbiamo disgiunto myEmployee da Person
e Address
, e idealmente dovremmo continuare ad applicare la minima conoscenza aggiungendo passare attraverso proprietà in modo che Employee
parli solo a Person
e Person
parla solo con Address