La legge di Demetra afferma quanto segue:
- Ogni unità dovrebbe avere una conoscenza limitata delle altre unità: solo le unità "strettamente" correlate all'unità corrente.
- Ogni unità dovrebbe parlare solo con i suoi amici; non parlare con estranei.
- Parla solo con i tuoi amici immediati.
C # 6.0 ha introdotto un nuovo operatore chiamato operatore null-condizionale . IMHO, semplifica la codifica e migliora la leggibilità. Ma semplifica anche la scrittura di più codice accoppiato, poiché è più semplice navigare nei campi di classe, verificando già la nullità (qualcosa del genere var x = A?.B?.C?.D?.E?.F?
).
È corretto affermare che questo nuovo operatore è contrario alla Legge di Demetra?
X.Y.Z.W.U
sia una violazione della "legge". Ma, nella mia esperienza con il codice, il 90% delle volte è semplicemente un brutto codice accoppiato.
.?
non viola più LoD di +
o -
non lo fa.
A?.B?.C?.D?.E?.F?
lo violerebbe? LoD non riguarda il numero di punti e se il metodo di chiamata ha tali informazioni sulla struttura che non viola i suoi punti, una chiamata del genere sarebbe perfettamente accettabile. Che tale codice potrebbe violare LoD non è sufficiente per dire che tutti gli usi di esso fare violano LoD.