Direi che esiste una linea guida generale. Se riesci a isolare parti che non devono sapere sulla parte rimanente, devi dividere il tuo sistema. Spesso finirai con una parte che serve l'altra (quindi puoi parlare di un sottosistema).
Le parti separate saranno probabilmente più utili, possono essere applicate in diversi scenari. Ti sarai creato dei blocchi predefiniti.
Si tratta di separare le responsabilità. Dovresti finire con blocchi che fanno solo una cosa. Come i dati del negozio o i dati di trasporto. Allora sarai in buona forma, puoi cambiare un blocco o addirittura sostituirlo senza rompere (dovendo fare molto lavoro con nessuno degli altri blocchi.