Cosa succede se non userò i modelli di progettazione software? [chiuso]


17

Che tipo di problemi potrei affrontare se non userò i modelli di progettazione software? Puoi parlarmi dei problemi di approccio al design usando tecniche standard orientate agli oggetti?


24
Alcuni modelli di progettazione software sono abbastanza ovvi. Dovresti conoscerli tutti molto bene per essere sicuro di non usarli - probabilmente abbastanza bene che potresti anche usarli!
James McLeod,

18
Come punto laterale di @JamesMcLeod, molti "Design Patterns" sono molto ovvi e le cose che tutti farebbero comunque. Perché allora diamo loro dei nomi? Ai fini della comunicazione. "Sto usando il modello X" ha una densità semantica molto maggiore rispetto alla spiegazione della tua soluzione nella speranza che l'altra estremità vada "Oh sì! L'ho fatto anche io, tranne che ho chiamato le mie variabili ...".
Phoshi,

6
@AJMansfield Alcuni dei peggiori codici che ho visto riguardavano l'entusiasmo eccessivo per i modelli di progettazione.
Erik Reppen,

5
@ErikReppen la colpa per l'uso eccessivo dei modelli di progettazione dovrebbe essere attribuita alla persona che lo fa. Dal mio punto di vista, il problema principale non è nei modelli di progettazione in sé, ma nell'eccessiva generalizzazione (in parte dovuta alla mancanza di supervisione architettonica) e nell'ingegneria eccessiva (a volte dai comitati di ingegneri).
rwong,

5
"Design Patterns" è un lessico, non una tecnica.
Kaz Dragon,

Risposte:


76

Ti manca il punto.

I pattern di progettazione esistono intrinsecamente quando si progetta software, proprio come esistono schemi strutturali nel mondo. Anche se non conosci il nome delle cose, alla fine scoprirai che alcune strutture fisiche sono adatte a determinati problemi. Scoprirai che una forma triangolare di legno / barre di metallo / ecc. È una struttura molto stabile, ma solo su un piano. Scoprirai che i mattoni quadrati hanno alcuni vantaggi rispetto a quelli rotondi ...

Allo stesso modo, alcune strutture software sono in qualche modo uniche o ottimali. Alla fine li troverai e li userai a prescindere se conosci i nomi per loro. Questo è il nucleo di ciò che sono i modelli di progettazione: sono nomi di queste strutture che i programmatori esperti conoscono e usano comunque. Offre ai programmatori la possibilità di comunicare in modo molto più uniforme e succinto. Inoltre, consente ai programmatori di pensare più consapevolmente al concetto di pattern.

Quindi i due punti chiave che sto cercando di fare:

  1. Non si può non utilizzare modelli di progettazione.
  2. Non conoscendo i nomi delle cose che stai usando, avrai difficoltà a lavorare in gruppo.

12
+1: assolutamente giusto. Ho iniziato lo sviluppo di OO prima che i modelli di progettazione diventassero noti o popolari. Sì, abbiamo anche inventato cose come fabbriche, singoli e qualcosa che, quando lo guardavi in ​​una luce intensa, assomigliava al modello di strategia. Il punto è ora che conosco i modelli di progettazione, so che le fabbriche erano OK ma avrebbero potuto essere fatte meglio, i Singleton erano fatti male e quello che avrebbe potuto essere un modello di strategia sarebbe stato molto meglio se fosse stato effettivamente un modello di strategia.
Binary Worrier,

3
... Imparare a conoscere i modelli di progettazione e imparare a usarli correttamente ti fa risparmiare così tanto tempo, hai meno probabilità di provare a reinventare la ruota, ti impedisce di guidare te stesso lungo una strada verso la cattiva progettazione e la costruzione di soluzioni sbagliate. Succhialo e impara gli schemi, usali quando funzionano per te e non usarli quando non lo faranno.
Binary Worrier,

1
E questo riassume esattamente le mie opinioni sugli schemi. Sono strumenti meravigliosi per comunicare ciò che stai facendo con altre persone. Non li costruirai mai esattamente perché ogni problema è diverso. Ma sono una sostanza, una direzione e una serie di linee guida da seguire, e rende facile spiegare agli altri che diamine stai facendo.
Matt D,

+1 per il confronto con strutture fisiche. Vorrei aggiungere che aiuta a costruire una casa se già sapete che una "capriata" è una buona struttura per sostenere il carico di un tetto, piuttosto che sperimentare e sperare che non collassi.
kdgregory,

39

Coloro che non ricordano il passato sono condannati a ripeterlo.

Non dovrai affrontare problemi specifici diversi da quelli sollevati dal tuo progetto. E col tempo finirai per usare gli schemi senza esserne consapevole, hai appena trascorso del tempo a capirli da solo. Conoscere in anticipo i modelli semplifica la loro individuazione nel design e porta il grande vantaggio che sono dimostrati da un numero di individui.

Tutto ciò che viene sviluppato oggi si basa in gran parte su conoscenze precedenti, non avrebbe senso ignorarlo. Immagina di costruire un grattacielo oggi senza conoscere i problemi che le persone hanno costruito cattedrali centinaia di anni fa.


10
"Ogni citazione ha una quotazione uguale e contraria." "Dobbiamo fare a pezzi il passato se vogliamo davvero meritare il futuro". (OK, uno era Hitler, quindi probabilmente è meglio ignorarlo ...)
Russell,

20

Che tipo di problemi potrei affrontare se non userò i modelli di progettazione software?

Avrai il problema di non poter scrivere alcun software.

Le variabili sono un modello di progettazione.

I metodi sono un modello di progettazione.

Gli operatori - addizione, sottrazione, ecc. - sono un modello di progettazione.

Le dichiarazioni sono un modello di progettazione.

I valori sono un modello di progettazione.

I riferimenti sono un modello di progettazione.

Le espressioni sono un modello di progettazione.

Le lezioni sono un modello di progettazione.

...

Tutto ciò che fai in programmazione in ogni momento è un modello di progettazione . Il più delle volte il modello è così radicato nel tuo pensiero che hai smesso di pensarlo come "un modello di design". Le cose che devi imparare come "il modello singleton" e così via sono semplicemente modelli che non sono stati (ancora) elaborati in qualsiasi linguaggio tu stia usando.

Puoi parlarmi dei problemi di approccio al design usando tecniche standard orientate agli oggetti?

No. Non ho idea di cosa significhi questa domanda. I modelli di progettazione sono "tecniche standard orientate agli oggetti" - questo è ciò che li rende modelli di progettazione . Un modello di progettazione è una tecnica standard per risolvere un problema particolare, in particolare (anche se non necessariamente ) in un linguaggio orientato agli oggetti.


1
The things that you have to learn like "the singleton pattern" and so on are simply patterns that haven't (yet) been baked into whatever language you're using.- Questa è (quasi) la definizione di un modello di progettazione - un costrutto di codice flessibile / facilmente riutilizzabile usato per superare una limitazione nel linguaggio stesso, che è facile da comunicare agli altri. Una volta che fa parte del linguaggio, non è più un modello di progettazione.
Izkata,

1
@Izkata: Quindi la tua posizione è che, per esempio, il modello di osservatore è impossibile in C # perché C # ha il modello di osservatore incorporato nel linguaggio sotto forma di eventi? È sciocco. Il bit specifico della lingua che è rilevante per un modello è il modo canonico per implementare il modello nella lingua. Naturalmente i modelli di progettazione possono essere utilizzati in lingue che li supportano direttamente; questo è il punto fondamentale di supportarli direttamente!
Eric Lippert,

Non ho mai detto impossibile, stavo cercando di insinuare inutili . Java, ad esempio , non ha eventi, quindi utilizza il modello di progettazione per simularli.
Izkata,

@Izkata: sono confuso allora. Hai detto che una volta che uno schema è parte del linguaggio, non è più uno schema. Quindi "lo schema osservatore" è uno schema in Java ma non uno in C #?
Eric Lippert,

1
O, per dirla in altro modo, uno schema di progettazione è qualsiasi cosa faccia un programmatore, di quanto possa essere descritto in inglese. Non sono sicuro di essere completamente d'accordo con la definizione, ma penso che rifletta accuratamente ciò che stai dicendo e almeno non abbia il beneficio di un giudizio soggettivo che conta come un modello. È una proprietà dell'analisi di ciò che fanno i programmatori, e ovviamente non è possibile per un programmatore agire in un modo che non può essere analizzato :-)
Steve Jessop,

4

Comprendere il punto di un modello di progettazione è più importante che utilizzarlo per la lettera. Alcuni schemi sono, IMO, sciocchi, almeno nei paradigmi linguistici a cui sono abituato. IMO, un programmatore che usa semplicemente i modelli di progettazione alla cieca e senza capirli davvero è un programmatore peggiore di quello che vorrebbe pensare attraverso le cose da solo. Ma qualcuno che si familiarizza con le idee e poi decide da solo se valgono la pena è probabilmente un programmatore molto più forte di entrambi.

Detto questo, non ho idea! @ # $ Ing idea di quale sia il punto del peso mosca e non mi vergogno di ammetterlo. (vedi i commenti per un'altra voce di Wikipedia che ha aiutato molto)

Raccomando la voce di Wikipedia sui modelli di progettazione. È scritto in modo molto conciso e chiaro. Molto utile per farsi un'idea del perché uno potrebbe disturbare con un determinato modello di progettazione o meno. Personalmente tendo a trovare le più semplici le più utili e non ci penserei due volte a modificare una data implementazione di qualsiasi modello per soddisfare le mie esigenze.

Sono idee, non progetti. In alcune lingue non sono affatto buone idee. In altri, sono giustamente visti come kludges per superare i punti deboli del design di una lingua che potrebbero essere meglio compensati attraverso una minore complessità. Indipendentemente da ciò, non fa male esaminarli e cercare di capire le sfide che devono superare prima di decidere le proprie soluzioni preferite.

Che tipo di problemi dovrai affrontare? Potresti perdere opportunità e dedicare più tempo ai problemi di quanti ne hai bisogno a meno che tu non sia un genio della programmazione che ha già capito tutto. È importante mantenere un occhio critico sulle idee di programmazione popolari, ma non fa mai male capire cosa pensano le persone che stanno risolvendo perché ciò darà maggiore chiarezza alle tue soluzioni / approcci preferiti.


2
volano (non volano). Leggi il primo paragrafo (e solo il primo paragrafo) dell'articolo di Wikipedia e poi guarda Integer.valueOf (int) e considera quante volte questo evita di creare nuovi numeri interi per valori comuni.

2
@MichaelT E dannazione. Ciò lo spiegò molto meglio di qualsiasi cosa io abbia mai visto. Grazie.
Erik Reppen,

Il problema che vedo con la maggior parte delle istruzioni del modello di progettazione è che provano a dare una visione di grande progetto (il libro GoF è interamente dedicato alla scrittura di un elaboratore di testi, non di un piccolo compito). Ma a volte sono applicabili a cose molto più piccole (quasi "banali"). 7 righe di codice possono descrivere chiaramente il peso mosca in qualcosa che tutti usano costantemente. Molto più facile da capire rispetto ai grandi progetti o esempi inventati.

1
@MichaelT Per me è anche un buon esempio di come ottenere un po 'di chiarezza su qualcosa sia utile per scrivere il codice in generale anche se quell'idea non ha un uso immediato nella mia lingua principale, JavaScript, dove l'ereditarietà prototipale e le chiusure sono in genere utilizzate per risolverlo problema. Avere quel momento a-ha mi ha ancora dato alcune idee che sono rilevanti.
Erik Reppen,

2

Il problema principale che dovrai affrontare è che reinventerai la ruota . Sono chiamati modelli perché appaiono spesso e in modo prevedibile.


0

Anche se segui i modelli di progettazione potresti finire con un cattivo design. I modelli di design sono naturali e finirai per usarne un po 'nel tuo design. Dovrai fare del tuo meglio per non usare nessuno degli schemi. Non c'è motivo di condannare i modelli di design, ciò che è più importante è scegliere i modelli giusti per le tue esigenze


-1

Stai usando sempre modelli di design senza accorgertene. Molte librerie standard in lingue popolari sono progettate tenendo conto dei modelli di progettazione. Un esempio è la FileReaderlibreria di Java che è stata progettata utilizzando il modello di progettazione del decoratore . Ora parlando del tuo proprio codice, non si è costretti a utilizzare modelli di progettazione (nella maggior parte dei casi). Un modello di progettazione è una "soluzione riutilizzabile a un problema che si verifica comunemente" , il che significa che ti aiuterà a scrivere codice più pulito e più gestibile, quindi dipende da te quanto vuoi evitare di finire con il codice spaghetti.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.