Flup è diretto nella giusta direzione. Il "principio di responsabilità unica" originariamente applicato alle procedure. Ad esempio, Dennis Ritchie direbbe che una funzione dovrebbe fare una cosa e farla bene. Quindi, in C ++, Bjarne Stroustrup direbbe che una classe dovrebbe fare una cosa e farla bene.
Si noti che, tranne che come regole empiriche, queste due formalmente hanno poco o nulla a che fare l'una con l'altra. Si occupano solo di ciò che è conveniente esprimere nel linguaggio di programmazione. Bene, è qualcosa. Ma è una storia abbastanza diversa da quella a cui sta andando il flup.
Le implementazioni moderne (vale a dire, agile e DDD) si concentrano più su ciò che è importante per il business che su ciò che il linguaggio di programmazione può esprimere. La parte sorprendente è che i linguaggi di programmazione non sono ancora stati raggiunti. I vecchi linguaggi FORTRAN catturano le responsabilità che si adattano ai principali modelli concettuali del tempo: i processi applicati a ciascuna carta mentre passava attraverso il lettore di carte o (come in C) l'elaborazione che accompagnava ogni interruzione. Poi vennero i linguaggi ADT, che erano maturati al punto da catturare ciò che le persone DDD avrebbero successivamente reinventato come importanti (sebbene Jim Neighbours ne avesse capito la maggior parte, pubblicato e in uso nel 1968): cosa oggi chiamiamo classi . (Non sono moduli.)
Questo passaggio era meno un'evoluzione che un'oscillazione a pendolo. Quando il pendolo si è spostato sui dati, abbiamo perso la modellazione del caso d'uso inerente a FORTRAN. Va bene quando l'obiettivo principale riguarda i dati o le forme su uno schermo. È un ottimo modello per programmi come PowerPoint, o almeno per le sue semplici operazioni.
Ciò che è perduto è responsabilità del sistema . Non vendiamo gli elementi di DDD. E non facciamo bene i metodi di classe. Vendiamo le responsabilità del sistema. A un certo livello, devi progettare il tuo sistema secondo il principio della responsabilità unica.
Quindi se guardi persone come Rebecca Wirfs-Brock, o me, che usavano parlare dei metodi di classe, ora stiamo parlando in termini di casi d'uso. Questo è ciò che vendiamo. Quelle sono le operazioni di sistema. Un caso d'uso dovrebbe avere un'unica responsabilità. Un caso d'uso è raramente un'unità architettonica. Ma tutti cercavano di fingere che fosse. Per esempio, testimonia le persone SOA.
Ecco perché sono entusiasta dell'architettura DCI di Trygve Reenskaug - che è ciò che è descritto nel libro Lean Architecture sopra. Alla fine dà una certa importanza a quello che era un arbitrario e mistico godimento di "singola responsabilità" - come si trova nella maggior parte delle argomentazioni di cui sopra. Questa statura si riferisce ai modelli mentali umani: prima gli utenti finali E i programmatori in secondo luogo. Si riferisce a problemi di business. E, quasi per caso, incapsula il cambiamento mentre il flup ci sfida.
Il principio della singola responsabilità come lo conosciamo è o un dinosauro rimasto dai suoi giorni di origine o un cavallo da passeggio che usiamo come sostituto per la comprensione. Devi lasciare alcuni di questi cavalli hobby per fare un ottimo software. E questo richiede di pensare fuori dagli schemi. Mantenere le cose semplici e facili da capire funziona solo quando il problema è semplice e facile da capire. Non sono molto interessato a queste soluzioni: non sono tipiche, e non è dove si trova la sfida.