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 la chiamata non può cambiare nulla del proprio metodo / prop. senza interrompere il chiamante .
Quindi, più l'accoppiamento - metodi, oggetti di scena. - più è difficile cambiare il codice chiamato senza rompere tutto il codice che lo utilizza.
contemplando l'accoppiamento
- Facendo riferimento anche a un singolo prop., Il metodo accoppia due oggetti.
- Ovviamente l'accoppiamento è necessario per la creazione di software.
- Data la natura del "passo di blocco" dell'accoppiamento, vogliamo sia limitarlo che isolarlo. Questo obiettivo va semplicemente d'accordo con gli sviluppatori software generici. i principi.
- Meno oggetti con cui dobbiamo parlare, minore è l'accoppiamento.
- Se devo fare, diciamo, 20 chiamate di metodi diversi, l'accoppiamento è inferiore se tutte e 20 le chiamate sono rivolte a una classe / oggetto, viceversa quegli stessi metodi si estendono su più classi / oggetti.
La maggior parte delle Conoscenze provoca un accoppiamento folle
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 che devo chiamare: myEmployee.me.home.street
. Questo è l'opposto di 180 gradi del principio della minima conoscenza. Devo sapere riguardo la struttura interna, la struttura composita, del Employee
, Person
e Address
le classi.
Questo design di classe difettoso mi costringe a conoscere tutte quelle classi e quindi myEmployee.me.home.street
mi abbina (l'oggetto chiamante) a non meno di 3 classi - per ottenere una sola proprietà!
La minima conoscenza salva la giornata
Se parlo solo la Employee
classe che sto applicando il principio della conoscenza almeno di per sé, e così facendo abbiamo automaticamente limito giunto solo a quella classe, e allo stesso tempo isolato accoppiamento a quella di classe.
Aggiungendo tutte le proprietà necessarie nella Employee
classe, risolviamo l'accoppiamento.
così
public class Employee {
public Person me = new Person();
public string street { return me.home.street; }
}
Mi permette di chiamare: myEmployee.street
-
- "Lo so" solo
Employee
- Sono accoppiato solo a
Employee
, non importa quanto complessa sia la sua struttura.
Minima conoscenza fino in fondo
Abbiamo disaccoppiato myEmployee da Person
e Address
, idealmente, dovremmo continuare ad applicare la minima conoscenza aggiungendo proprietà pass through in modo tale da Employee
parlare solo Person
e Person
solo parlareAddress