Cominciamo con Wikipedia:Che cos'è Law of Demeter?
Più formalmente, la Legge di Demetra per le funzioni è necessario che un metodo m di un oggetto O può invocare solo i metodi dei seguenti tipi di oggetti:
- O si
- parametri di m
- Tutti gli oggetti creati/istanziati all'interno m
componente diretta- di O oggetti
- Una variabile globale, accessibile da O, nell'area di m
Regola 1:
public class ClassOne {
public void method1() {
method2();
}
public void method2() {
}
}
Regola 2:
public class ClassOne {
public void method1(ClassTwo classTwo) {
classTwo.method2();
}
}
class ClassTwo {
public void method2() {
}
}
Regola 3:
public class ClassOne {
public void method1() {
ClassTwo classTwo = new ClassTwo();
classTwo.method2();
}
}
class ClassTwo {
public void method2() {
}
}
regola 4 (grazie @juharr):
public class ClassOne {
private ClassTwo classTwo;
public void method1() {
classTwo = new ClassTwo();
classTwo.method2();
}
}
class ClassTwo {
public void method2() {
}
}
Regola 5:
?
qualcuno mi può aiutare con l'articolo 5?
E la legge di Demetra non implica che il concatenamento è cattivo?
User.getName().getLastName();
Ciò comporta un accoppiamento elevato.
"Non dire, non chiedere" un principio simile?
Quindi è tutto? Mi sbaglio qualcosa? Come puoi obbedire alla Legge di Demetra?
Sì, fondamentalmente "demeter" può essere letto per dire: il concatenamento è cattivo. Non ottieni qualcosa per ottenere qualcosa da quello per fare qualcosa sull'ultima cosa. – GhostCat
La regola 4 è se 'ClassOne' ha un campo privato (componente) di tipo' ClassTwo', quindi puoi chiamare i metodi su quel campo dal tuo metodo in 'ClassOne'. – juharr
@juharr Grazie! – Anonymous