Oltre alle altre ottime risposte qui, un modo per pensarci è che non si sta migliorando realmente il livello di astrazione (nella direzione di una capacità full duplex) applicando singoli wrapper all'ingresso & flussi di output.
Anche se è vero che l'input & i flussi di output forniscono individualmente la propria responsabilità quando vengono visualizzati al loro livello di astrazione: d'altra parte, il pacchetto di input e amp; l'output messo insieme forma un livello più alto di astrazione, il flusso full duplex. Avere un livello più alto di astrazione, quando lo osserviamo in questo modo: ha una sua singola responsabilità, l'accoppiamento di un input appropriato e amp; flusso di output per formare un collegamento com full duplex.
Un suggerimento che suggerisce di innalzare il livello di astrazione combinando i due insieme perché ora hai una singola entità che fornirà full duplex, e puoi passare ad altri, e specialmente considerando che per confronto:
Se avvolgi input e amp; output individualmente e separatamente, si dovrebbe (ancora) avere due astrazioni da passare in giro, e i clienti dovrebbero preoccuparsi di (potenzialmente i dettagli di) accoppiare i due, se non almeno tenerli insieme quando passano intorno, per formare il pieno astrazione duplex. (Potresti ancora mettere un input avvolto e un'uscita insieme per manifestare finalmente una buona astrazione full duplex, ma qual è il punto dei wrapper intermedi?)
Quindi, mentre i flussi unidirezionali sottostanti hanno ciascuno una propria responsabilità, così una classe che li raggruppa insieme ha una sua singola responsabilità. Questi non si escludono a vicenda: perché quest'ultimo è ad un livello più alto di astrazione. Nel loro insieme, queste classi presentano una stratificazione, che è un modo per mantenere i progetti focalizzati sulla loro singola responsabilità. La stratificazione è il punto in cui un'astrazione viene implementata interamente dalle astrazioni nello strato successivo, senza dover andare più in basso. (La stratificazione è una tecnica che mi piace ridurre la complessità di progetti software molto grandi.)