Se stai parlando di Law of Demeter come "non chiamare i vicini dei vicini" puoi delegarlo ad altri metodi che fanno ciò che vuoi.
Dal tuo esempio, suppongo che tu voglia reimpostare il valore della prestazione o qualcosa del genere. È possibile modificare il codice di esempio in modo che siano incatenati intrinsecamente invece:
Category cat = new Category();
cat.resetPerf();
il codice sarebbe qualcosa di simile a questo:
public class BigPerformance
{
//constructors 'n stuff
public static decimal DEFAULT;
public decimal Value {get; private set;}
public void reset() {
Value = BigPerformance.DEFAULT;
}
}
public class Performance
{
//constructors 'n stuff
private BigPerformance BigPerf {get; set};
public reset() {
BigPerf.reset();
}
}
public class Category
{
// constructors 'n stuff
public Performance Perf {get; private set;}
public resetPerformance() {
Perf.reset();
}
}
In questo modo la classe Category
non ha bisogno di sapere come reimpostare il valore nel caso in cui il valore predefinito sia qualcosa di diverso o il suo tipo sia cambiato in futuro.
Personalmente, se il rischio di modifica è basso, preferisco utilizzare lo juharr's answer.
Questo non è corretto; vedere la risposta di Chris S http://stackoverflow.com/questions/2666930/how-to-modify-code-so-that-it-adheres-to-the-law-of-demeter/2667019#2667019 – Spoike
Getter della proprietà è un metodo –