Accouplement, simplifié
Lorsqu'un objet appelle une méthode, une propriété, etc. d'un autre objet, nous disons que les objets sont couplés. Nous l' appelons couplage parce que maintenant le callee ne peut pas changer quoi que ce soit au sujet de sa propre méthode / prop. sans casser l' appelant .
Ainsi, plus le couplage - méthodes, accessoires. - plus il est difficile de changer le code appelé sans casser tout le code qui l'utilise.
envisager le couplage
- Référençant même un seul accessoire, la méthode couple deux objets.
- Il est évident que le couplage est nécessaire pour créer un logiciel.
- Étant donné la nature du «verrouillage» du couplage, nous voulons à la fois le limiter et l'isoler. Cet objectif va de pair avec le développement logiciel général. des principes.
- Moins nous devons parler d'objets, plus le couplage est faible.
- Si j'ai besoin de faire, disons, 20 appels de méthode différents, le couplage est plus faible si tous les 20 appels sont à une classe / objet, vice versa ces mêmes méthodes réparties sur plusieurs classes / objets.
La plupart des connaissances provoquent un couplage fou
Ici, nous avons un Employee
qui a un Person
qui a une «adresse»
public class Employee {
public Person me = new Person();
}
public class Person {
public Address home = new Address();
}
public class Address {
public string street;
}
Pour obtenir la rue , je dois appeler: myEmployee.me.home.street
. C'est à 180 degrés à l'opposé du principe de moindre connaissance. Je dois savoir sur le fonctionnement interne, la structure composite, du Employee
, Person
etAddress
les classes.
Cette conception de classe défectueuse me force à connaître toutes ces classes et doncmyEmployee.me.home.street
me couple (l'objet appelant) à pas moins de 3 classes - pour obtenir une seule propriété!
La moindre connaissance sauve la mise
Si je parle à la seule Employee
classe Je demande le principe de moindre connaissance en soi, et en le faisant , nous automatiquement limiterai couplage à seulement cette classe, et en même temps isoler le couplage à celui d' une classe.
En ajoutant toutes les propriétés nécessaires dans le Employee
classe, nous fixons le couplage.
Donc
public class Employee {
public Person me = new Person();
public string street { return me.home.street; }
}
Me permet d'appeler: myEmployee.street
-
- Je "connais" seulement
Employee
- Je suis couplé à seulement
Employee
- peu importe la complexité de sa structure.
La moindre connaissance jusqu'en bas
Nous découplé myEmployee de Person
et Address
, et , idéalement , nous devrions continuer à appliquer les connaissances moins en ajoutant passe par des propriétés telles que Employee
parle seulement Person
et Person
parle seulementAddress