Penso che quello con cui stai combattendo sia la nozione di coesione.
La coesione è facile da definire e difficile da capire. È l'idea che le cose che appartengono insieme dovrebbero essere vicine l'una all'altra.
Gran parte del refactoring sta rimuovendo la duplicazione. Questo generalmente porta al codice di disaccoppiamento, che può anche ridurre la coesione.
Un'analogia decente è l'idea che la coesione è come la colla, le parti realmente resistono all'essere separate perché sono parte integrante della struttura nel suo insieme. L'accoppiamento è come le viti, ti consente di mettere insieme due oggetti molto diversi, e quegli oggetti non resistono alla separazione (con un cacciavite).
La manutenzione / leggibilità è davvero il più grande driver in questa conversazione - qualcosa che non ha MAI bisogno di cambiare può essere strettamente intrecciata in qualcos'altro - a chi importa? Ma il fatto che tu abbia iniziato a refactoring significa quasi sempre che hai cambiato o che stavi cercando di cambiare questo codice. Quali cambiamenti renderà più facile cambiare in futuro? Dal momento che non puoi sapere che in molti casi, la soluzione predefinita è renderla il più semplice e comprensibile possibile.
Una cosa a cui pensare - un metodo a una riga è spesso ok perché puoi chiamarlo in modo molto più significativo per il tuo dominio. Se ho scritto una classe per contare le parole in una frase, il fatto di nominare un metodo chiamato parole che divide la mia frase in parole è ottimo per la leggibilità. Funziona particolarmente bene in ruby poiché i metodi e le variabili locali "si sentono" intercambiabili.
def words
scan(/\w+/).map { |w| w.downcase }
end