Posso assegnare a una singola classe più responsabilità se solo una sarà mai riutilizzabile?

3

Nella misura in cui comprendo il principio di responsabilità singola , una classe SINGLE deve avere una sola responsabilità.

Usiamo questo in modo che possiamo riutilizzare altre funzionalità in altre classi e non influenzare l'intera classe.

La mia domanda è: cosa succede se l'entità ha un solo scopo che realmente interagisce con il sistema, e che lo scopo non cambierà? Devi separare le implementazioni dei tuoi metodi in un'altra classe e solo istanziare quelli della tua classe di entità?

O per dirla in un altro modo ... È giusto interrompere l'SRP se sai che queste funzioni non saranno riutilizzabili in futuro? O è meglio supporre che non sappiamo se le funzionalità di questi metodi saranno riutilizzabili o meno, e quindi basta astrarle in altre classi?

    
posta Shog9 02.11.2011 - 15:07
fonte

3 risposte

5

Una formulazione dell'SRP è: ogni classe dovrebbe avere solo una ragione per cambiare.
La ragione di questo è che i requisiti sono quasi certi di cambiare ad un certo punto nel futuro, probabilmente il meno conveniente.

Quando si utilizza una classe per implementare due funzionalità separate, si rischia di imbattersi in una situazione, in cui i requisiti per entrambe le funzionalità cambiano e i due insiemi di requisiti e la decisione progettuale di non mantenere separata la loro implementazione non possono più essere riconciliati. Questa è l'ultima chiamata per applicare SRP e refactoring della prima classe in due (o più), prima di iniziare a piegare il codice attorno a un difetto di progettazione.

Ma seriamente, fallo subito la prima volta. Per tutto il tempo che rifiuti di speculare sul fatto che sia sicuro violare SRP in base alla tua prognosi sui cambiamenti dei requisiti futuri (che è qualcosa a cui i programmatori in realtà fanno semplicemente schifo), usalo per creare due classi. È una cosa banale da fare, che la maggior parte degli IDE farà anche per te.

    
risposta data 06.11.2011 - 19:04
fonte
2

La tua ipotesi che potresti sapere che le funzioni non saranno riutilizzate non è corretta. Non puoi sapere chi vorrà usare le tue lezioni o come vorranno usarle. Pertanto, dovresti sempre presumere che la tua classe verrà utilizzata da qualcun altro in futuro e attenersi ai buoni principi di progettazione.

Se non altro quando rivisita il codice tra 18 mesi sarai in grado di capire cosa stavi tentando di fare quando hai scritto il codice in primo luogo.

    
risposta data 06.11.2011 - 18:15
fonte
0

I test di unità possono essere considerati come riutilizzare una classe.

Pertanto SRP migliora la testabilità .

    
risposta data 06.11.2011 - 18:30
fonte

Leggi altre domande sui tag