Esiste il classico problema OOP del concatenamento dei metodi rispetto ai metodi "single-access-point":
main.getA().getB().getC().transmogrify(x, y)
vs
main.getA().transmogrifyMyC(x, y)
Il primo sembra avere il vantaggio che ogni classe è responsabile solo di un insieme più piccolo di operazioni e rende tutto molto più modulare - l'aggiunta di un metodo a C non richiede alcuno sforzo in A, B o C per esporlo.
Il rovescio della medaglia, ovviamente, è l' incapsulamento più debole , che il secondo codice risolve. Ora A ha il controllo di ogni metodo che lo attraversa e può delegarlo ai suoi campi se lo desidera.
Mi rendo conto che non esiste un'unica soluzione e ovviamente dipende dal contesto, ma mi piacerebbe davvero sentire alcuni suggerimenti su altre importanti differenze tra i due stili e in quali circostanze dovrei preferire uno di essi - perché in questo momento, quando provo per progettare un po 'di codice, mi sento come se non stessi usando gli argomenti per decidere in un modo o nell'altro.