Questa è una buona domanda.
Se mi è concesso di parlare, direi che la lingua è la chiave per la modellazione. La metodologia che stai cercando è nascosta nella tua comprensione della lettura.
Se l'OOP è pensato per essere un paradigma per modellare il mondo reale, una buona domanda sarebbe: Qual è il mondo reale?
Il mondo reale non è nient'altro che la nostra percezione di questo. E tu indovina cosa? La nostra percezione è modellata dal nostro linguaggio. Di conseguenza, per la modellazione, dobbiamo concentrarci sulla comprensione della lettura e fare attenzione al linguaggio che usiamo per descrivere il problema (il dominio).
Prestando attenzione al linguaggio possiamo supporre che le diverse astrazioni che entrano in gioco e il modo in cui collaborano tra loro. Non sto dicendo nulla di nuovo, immagino tu sia a conoscenza della così famosa lingua onnipresente di Eric Evans.
Per me, le astrazioni e le responsabilità sono correlate.
A questo punto potresti essere interessato a GRASP .
Possiamo ripetere l'analisi della lingua per ognuna delle astrazioni perché ognuna di esse può essere scomposta in diversi livelli di astrazione . Di quanti livelli abbiamo bisogno varia da progetto a progetto, ma di solito, una regola empirica è KISS.
In short, responsibilities can nest. It's OK to look inside something
with a single responsibility and find other things that have single
responsibilities.
CandiedOrange' answer
Per quanto riguarda questo processo (composizione / scomposizione) potrebbe interessarti top-down e in basso -up strategie di progettazione.
Prendi come esempio una catena di fornitura , dove fornire è il livello più alto di astrazione, mentre i diversi lavori lungo tutta la catena sono livelli più bassi di astrazione.
Top-level : Supply
Mid-level : Assembly -> Packaging -> Shipping -> Delivery
...
Se abbiamo bisogno di migliorare la nostra catena con un processo di consegna più veloce, possiamo affrontare la soluzione cambiando solo questa responsabilità senza dover cambiare l'intera catena. Ma possiamo farlo perché capiamo che consegna e spedizione sono responsabilità diverse.
When something has only one responsibility it should only have one
reason to change.
CandiedOrange' answer
Hai bisogno di un'altra prova dell'importanza della lingua?
Oh and the class should have a name that makes the methods you find
inside no surprise at all
CandiedOrange' answer
Se puoi fornire le tue astrazioni con nomi coerenti o se i nomi delle tue astrazioni possono descrivere in modo coerente ciò che ognuno di loro dovrebbe fare, è probabile che tu abbia modellato le responsabilità.