È Responsabilità Unica linea di Principio, una regola di OOP?[chiuso]

StackOverflow https://stackoverflow.com/questions/15412

  •  08-06-2019
  •  | 
  •  

Domanda

Un risposta per un Overflow dello Stack domanda ha affermato che un quadro particolare violato in modo semplice e chiaro OOP regola:Unico Principio di Responsabilità (SRP).

È l'Unico Principio di Responsabilità davvero una regola di OOP?

La mia comprensione della definizione della Programmazione Orientata agli Oggetti è "un paradigma in cui gli oggetti e il loro comportamento sono utilizzati per creare software".Questo include le seguenti tecniche:Incapsulamento, Polimorfismo Ed Ereditarietà.

Ora non fraintendetemi, io credo SRP essere la chiave per la maggior parte di buona OO disegni, ma ho la sensazione che ci sono casi in cui questo principio può e deve essere rotto (proprio come database di regole di normalizzazione).Ho aggressivo spingere i vantaggi di SRP, e la maggior parte del mio codice segue questo principio.

Ma, è una regola, e comporta, quindi, che non dovrebbe essere rotto?

È stato utile?

Soluzione

Poche regole, se del caso, di sviluppo del software sono senza eccezione.Alcune persone pensano che non ci siano luogo per goto ma si sbagliano.

Per quanto OOP va, non c'è una sola definizione di oggetto, di orientazione agli quindi, a seconda di chi si chiede otterrete un diverso insieme di hard e soft principi, modelli e pratiche.

L'idea classica di OOP è che i messaggi vengono inviati al contrario gli oggetti opachi e gli oggetti di interpretare il messaggio con la conoscenza della loro interiora e quindi svolgono una funzione di qualche tipo.

SRP è un software di ingegneria principio che si possono applicare per il ruolo di una classe, o di una funzione, o di un modulo.Esso contribuisce alla coesione di qualcosa di così che si comporta bene mettere insieme, senza estranei bit appeso fuori di esso o avere più ruoli che si intrecciano e si complicano le cose.

Anche con una sola responsabilità, che può comunque variare da una singola funzione per un gruppo di stretta relazione con le funzioni che fanno parte di un tema comune.Finché si sta evitando giuria-sartiame di un elemento di assumere la responsabilità di qualcosa che non è stato progettato principalmente per o fare qualche altro ad hoc, cosa che diluire la semplicità di un oggetto, quindi violare qualsiasi principio che si desidera.

Ma trovo che sia più facile ottenere SRP quindi giusto per fare qualcosa di più elaborato che è robusto.

Altri suggerimenti

Nessuna di queste regole sono leggi.Sono più linee guida e best practice.Ci sono momenti in cui non ha senso seguire "le regole" e avete bisogno di fare ciò che è meglio per la vostra situazione.

Non avere paura di fare ciò che pensi sia giusto.Si potrebbe effettivamente venire con nuove e migliori regole.

Per citare il Capitano Barbossa:

"..E, in secondo luogo, è necessario essere un pirata affinché il codice per applicare e non siete.E in terzo luogo, il codice è più quello che si dice "linee guida" rispetto effettivo delle regole...."

Per citare Jack Sparrow & Gibbs."Ho pensato che si doveva tenere il codice." SignorGibbs:"Abbiamo pensato che fossero più attuali linee guida."

Così chiaramente Pirati capire questo abbastanza bene.

Le "regole" potrebbe essere compreso attraverso i modelli di movimento come "Forze"

Quindi c'è una forza cercando di rendere la classe ha una sola responsabilità.(coesione)

Ma c'è anche una forza, cercando di mantenere l'accoppiamento con altri corsi giù.

Come con tutti i design ( e non solo), del codice) la risposta è che dipende.

Ahh, credo che questo si riferisce a una risposta che ho dato.:)

Come con la maggior parte delle regole e delle leggi, ci sono motivazioni da cui queste regole sono rilevanti-se il sottostante motivo non è presente o è applicabile al tuo caso, quindi siete liberi di piegatura/rompere le regole in base alle proprie esigenze.

Detto questo, SRP non è una regola di OOP per sé, ma sono considerate le migliori pratiche per creare le applicazioni OOP che sono entrambi facilmente estendibile e unit-test.

Entrambi sono caratteristiche che ritengo di fondamentale importanza nello sviluppo di applicazioni enterprise, dove la manutenzione delle applicazioni esistenti occupa più tempo di quello nuovo di sviluppo.

Come molti altri manifesti hanno detto, tutte le regole sono fatte per essere infrante.
Detto questo, penso che SRP è una delle più importanti regole per scrivere del buon codice.Non è specifico per la programmazione Orientata agli Oggetti, ma il "incapsulamento" parte della programmazione a oggetti è molto difficile da fare se la classe non ha una sola responsabilità.

Dopo tutto, come si fa correttamente e semplicemente incapsulare una classe con più responsabilità?Di solito la risposta è più interfacce e in molte lingue che possono aiutare un po', ma è ancora fonte di confusione per gli utenti della classe che si può applicare in modi completamente diversi in situazioni diverse.

SRP è solo un'altra espressione di ISP :-) .

E la "P" significa "principio" , non "regola" :D

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top