Esiste il classico problema di OOP dei metodi di concatenamento di metodi rispetto a "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 A, B o C per esporlo.
Il lato negativo, 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 che ovviamente dipende dal contesto, ma mi piacerebbe davvero sentire qualche input su altre importanti differenze tra i due stili, e in quali circostanze dovrei preferire uno di essi - perché adesso, quando provo a progettare un codice, mi sembra di non utilizzare gli argomenti per decidere in un modo o nell'altro.