Qual è il modello di progettazione più utilizzato? [chiuso]


24

Quale modello di design pensi sia il più popolare?


Entrambi, se possibile ...
Tamara Wijsman,

"passa invece al polimorfismo"?
mlvljr,

@Bigown: dovresti quindi "accettare" la risposta che ti è piaciuta di più. Se non ti piace nessuna delle risposte, ti preghiamo di offrire una taglia.
Macneil,

2
votato per chiudere come non costruttivo - questo è fondamentalmente un sondaggio. A meno che qualcuno non abbia uno studio empirico da citare, le risposte saranno tutte ipotesi o favoriti (o non preferiti) e i voti rifletteranno sentimenti personali. Il risultato finale sarà un elenco di modelli di progettazione senza profondità. Quindi, non costruttivo.
Steven A. Lowe,

@Steven: Sono abbastanza sicuro che Jay abbia ragione con The Big Ball of Mud. :-)
Tamara Wijsman

Risposte:


39

Sono abbastanza sicuro che il più comune sia "The Big Ball of Mud". Sfortunatamente per tutti noi.
http://en.wikipedia.org/wiki/Big_ball_of_mud


D'accordo, quando inizi un nuovo progetto tutto è ben strutturato e documentato, ma quando si avvicina la scadenza, tutto finisce come una grande palla di fango
Arturo Molina,

3
@Arturo - Questa è una possibile ragione. Altri: 1) Piccolo progetto avviato da un programmatore inesperto che ha inaspettatamente successo e poi cresce oltre il suo scopo originale. 2) La tendenza dei programmatori inesperti viene assegnata alla manutenzione, che quindi non ha una guida o una comprensione dell'architettura originale, quindi si limitano a hackerare le cose e peggiora con l'invecchiamento del sistema. 3) Il team usa la tecnologia sbagliata, o una nuova tecnologia con cui non ha familiarità e la usa male su un nuovo progetto, e craterizza prima della scadenza :)
Jay

1
LOL - Se potessi aggiungere più punti a te, lo farei. Osservazione eccellente (e triste).
luis.espinal,

25

MVC e le sue varianti sono sicuramente uno dei migliori modelli di design.


2
Stavo per dire che la domanda del PO è piuttosto sciocca (credo ancora che lo sia). Tuttavia, la tua risposta è praticamente IMO corretta. Se esiste un modello (e le sue variazioni) che viene praticamente utilizzato in modo coerente, è questo. +1 per la tua buona risposta.
luis.espinal,

21

Se stai parlando di modelli di design Gang-of-Four , dovrei dire Singleton . Questo è uno stato di cose davvero triste - quasi come se i programmatori sentissero parlare della magia dei modelli di progettazione e poi semplicemente si fermassero dopo il primo.

Se stai parlando di modelli in stile architettonico (in altre parole, modelli di progettazione che si estendono su più classi o livelli), dovrei dire MVC . Alcuni altri popolari sono il modello di repository e il localizzatore di servizi .


2
È ancora più triste se si considera che molte persone considerano il Singleton un antipasto!
RichardOD,

1
@RichardOD, triste che le persone lo considerino uno quando non lo è, o triste che le persone lo usano quando è un anti-pattern?
Matt Olenik,

Voglio dire, è triste che sia così popolare, sembra essere il preferito dell'intervista. L'ultima volta che sono stato intervistato mi è stato chiesto come avrei codificato un Singleton, e la mia risposta è stata che non avrei usato un contenitore IoC come Unity per gestirlo.
RichardOD,

@RichardOD - non è singleton che è considerato un anti-pattern. È l'abuso di esso che è un anti-schema. Pochissimi casi in realtà richiedono / necessitano singleton e in ambienti con contenitori che controllano la granularità delle risorse, non sono nemmeno necessari. Quando si vede un Singleton in un moderno base di codice Java, per esempio, che è una bandiera rossa in genere per un anti-modello di utilizzo (non sul pattern Singleton in sé.)
luis.espinal

@Jaco - Avrei un approccio diverso da te. Penso che il composito, la strategia e il modello (e le loro molteplici reincarnazioni) siano diventati molto, molto più diffusi del singleton, specialmente da quando ci siamo concentrati sulla composizione strutturale sull'eredità nell'ultimo decennio circa.
luis.espinal,


7

Decoratore

Aggiungi funzionalità a un oggetto in fase di runtime attraverso la composizione. Il mio preferito personale.

Modifica: anche Factory è probabilmente uno dei più comuni.


5

Facciata

Pensa a qualsiasi interfaccia REST come Twitter o le API SO. Sta nascondendo un mucchio di cose sul back-end che, almeno nel caso di Twitter, possono essere orribilmente complesse.

Mi interessa quali sono i tweet di db tables @ apklusk memorizzati? E che ha una cache veloce? E che @shemnon ha lettori così bassi che i tweet sono sempre senza memoria? Questa è la magia della facciata.


5

Modello di strategia

Se hai mai usato l'iniezione di dipendenza, hai usato il modello di strategia.


Concordato, strategia oltre al modello e al composito (e alle loro molteplici varianti e combinazioni).
luis.espinal

5

Perché nessuno ha ancora menzionato l' iteratore ? Soprattutto con tutte le mappe che compongono strutture dati complesse ... è quella che utilizzo di più. O stiamo parlando di schemi che ri-implementiamo?


3

Sono sorpreso che nessuno abbia menzionato il modello Factory, nella mia esperienza che è uno dei modelli più utilizzati (e anche più abusati) là fuori. Se non fosse il primo, probabilmente il singleton dovrebbe essere il primo, avrei pensato che sarebbe stato un secondo vicino.


3

Insieme alla mia risposta precedente, ne aggiungerò una nuova che ho incontrato oggi dalla mia bestia di un progetto ereditato:

Copia incolla

Durante il debug mi sono imbattuto in un pezzo di codice che chiamava 2 funzioni simili:

if(x)
   Func1
else
   Func2

Func1 e Func2 avevano gli stessi parametri. Li ho estratti e diffusi, e sono uguali al 100% tranne che per Func1 chiama Func3 e Func2 chiama Func4. Ho estratto quelli e li ho diffusi. Lo stesso al 100%, tranne 1 riga. Quindi un programmatore precedente ha deciso di copiare e incollare due funzioni nidificate a 50 righe, invece di aggiungere un parametro flag, a 2 funzioni private utilizzate esattamente in 1 posizione. Mi fa venire voglia di piangere.


2

Parlando di modelli di design Gang-of-Four, non riesco a pensare a un programma che non utilizza il modello Observer. Inoltre, come menzionato da Jaco, anche Singleton è molto usato, purtroppo è diventato un martello (qualsiasi programmatore lo usa anche se non è completamente necessario).


1
Divertente, ma non ho mai avuto bisogno di usare un Singleton. Se ho bisogno di un posto per mantenere lo stato globale, lo inserisco in un file di configurazione e utilizzo una classe normale per accedervi.
Robert Harvey,

Naturalmente, in quei casi non è necessario ... che dire di quando hai davvero bisogno di un oggetto per fare un lavoro, in modo sincrono e sicuro per i thread. Singleton non è solo per mantenere lo stato di alcune variabili statiche, è un vero oggetto con un vero lavoro da svolgere, ecc.
Cristian,

Solo il tempo che ho mai visto è necessario per le connessioni al database. Detto questo, quasi ogni classe "Service" (leggi: simile alla fabbrica) in questo progetto al lavoro è un singleton, memorizzato nella $_SESSIONvariabile PHP .
Tarka,

2

Interprete

Raramente implementato, spesso usato. Selettori XPATH, XSLT, Regex, jQuery, ecc.


1

Sono sorpreso che nessuno abbia ancora detto "Costruttore". O "Adattatore". Probabilmente non sono così esotici come alcuni degli altri citati, ma li uso sempre. Factory e Abstract Factory sono anche molto comuni (ma sono già stati presi).




0

A livello di progettazione del software, direi che Composito, Strategia e Template (e, in misura minore, Factory) sono i più utilizzati. Nell'ultimo decennio abbiamo visto una preferenza per la composizione rispetto all'eredità quando abbiamo costruito i nostri sistemi usando un design OO. Di conseguenza, la combinazione dei modelli appena menzionati gioca un ruolo molto più importante di tutti gli altri IMO.

Dal punto di vista architettonico, discuterei di MVC sull'azienda e di modelli basati su macchine a stati sul lato incorporato delle cose.

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.