Qual è la differenza tra design pattern e pattern architettonici?


119

Quando leggiamo dei design pattern su Internet notiamo che ci sono 3 categorie:

  • creazionale
  • Strutturale
  • comportamentale

Ma quando creiamo l'architettura di un software, pensiamo a MVP, MVC o MVVM.

Ad esempio, tra i pattern creazionali ho trovato il pattern singleton , ma ho anche usato singleton nel mio MPV.

Quindi la mia domanda è: un design pattern è una struttura complessiva di un prodotto?

  • Se sì, allora come può essere singleton un design pattern? Perché posso usarlo ovunque nella mia applicazione. Fondamentalmente, è limitato solo a creare un'istanza alla volta in memoria, ma questo concetto non definisce come è progettato il software?

  • In caso contrario, dove sono MVP, MVC e MVVM nelle tre categorie di pattern? E qual è la differenza tra design e architettura del software?



2
Dai

Risposte:


174

Richiede una spiegazione dettagliata ma cercherò di abbozzare le differenze al meglio delle mie conoscenze.

I modelli sono comunanza distillata che trovi nei programmi. Ci permette di decostruire una grande struttura complessa e costruire utilizzando parti semplici. Fornisce una soluzione generale per una classe di problemi.

Un grande software complesso passa attraverso una serie di decostruzioni a diversi livelli. A livello generale, i modelli architettonici sono gli strumenti. A livello più piccolo, i modelli di progettazione sono gli strumenti e a livello di implementazione, i paradigmi di programmazione sono gli strumenti.

Un modello può verificarsi a livelli molto diversi. Vedi frattali . Ordinamento rapido, Ordinamento unito sono tutti modelli algoritmici per organizzare un gruppo di elementi in un ordine.

Per una visione più semplicistica:

  • Paradigmi di programmazione - specifici del linguaggio di programmazione
  • Modelli di progettazione : risolve i problemi ricorrenti nella costruzione del software
  • Modelli architettonici : organizzazione strutturale fondamentale per i sistemi software

Gli idiomi sono tecniche di programmazione specifiche del paradigma e del linguaggio che riempiono i dettagli di basso livello.

I modelli di progettazione sono generalmente associati a punti in comune a livello di codice. Fornisce vari schemi per perfezionare e costruire sottosistemi più piccoli. Di solito è influenzato dal linguaggio di programmazione. Alcuni modelli diventano insignificanti a causa dei paradigmi linguistici . I design pattern sono tattiche di media scala che arricchiscono parte della struttura e del comportamento delle entità e delle loro relazioni.

Mentre i modelli architettonici sono visti come elementi comuni a un livello superiore rispetto ai modelli di progettazione. I modelli architettonici sono strategie di alto livello che riguardano componenti su larga scala, proprietà globali e meccanismi di un sistema.

Come si ottengono i modelli? Attraverso:

  1. riutilizzo,
  2. classificazione
  3. e infine l'astrazione per distillare la comunanza.

Se hai seguito i pensieri di cui sopra. Vedrai che Singleton è un "design pattern" mentre MVC è uno dei pattern "architettonici" per gestire la separazione delle preoccupazioni.

Prova a leggere:

  1. http://en.wikipedia.org/wiki/Architectural_pattern_(computer_science)
  2. http://en.wikipedia.org/wiki/Design_pattern
  3. http://en.wikipedia.org/wiki/Anti-pattern

14
Molto ben fatto ed elaborato. Ora avrei solo voluto che tutti usassero i termini così differenziati come li hai messi qui. Posso appuntare una stampa della tua risposta sul muro sopra il distributore di caffè del nostro ufficio marketing? Forse un giorno capiranno. ;-)
ofi

@ofi: grazie! L'uso della costruzione del linguaggio può sia fuorviarci che guidarci. Questo è qualcosa che trovo abbastanza potente.
pyfunc

+3 per averci
salvato

Buona risposta, grazie !! come ha detto @ofi, lo stamperò e lo appenderò al muro del team di progettazione.
rotolo

11

I modelli di progettazione sono modelli ben noti per risolvere problemi tecnici in un modo che si è dimostrato più volte valido. I modelli di progettazione sono strutture e pratiche di progettazione comuni che consentono di creare software riutilizzabile orientato agli oggetti. Esempi di design pattern sono Factory Pattern, Singleton, Facade, State, ecc. I design pattern possono essere utilizzati per risolvere problemi più piccoli in tutta l'applicazione e sono molto più facili da inserire, modificare, aggiungere rispetto all'architettura complessiva

i modelli di architettura sono modelli ben noti per la risoluzione dei problemi di architettura delle applicazioni software. L'architettura dell'applicazione software è il processo di definizione di una soluzione strutturata che soddisfi tutti i requisiti tecnici e operativi. L'architettura dell'applicazione è l '"organizzazione" complessiva del codice. Esempi di architetture differenti potrebbero essere MVC, MVVM, MVP, n-layer (cioè UI-BLL-DAL), ecc. L'architettura in genere deve essere decisa in anticipo e spesso è difficile da modificare una volta che l'applicazione è stata creata.


1

Gli elementi architettonici tendono verso raccolte di classi o moduli, generalmente rappresentati come scatole. I diagrammi sull'architettura rappresentano il livello più alto guardando verso il basso, mentre i diagrammi delle classi sono al livello più atomico. Lo scopo dei modelli di architettura è capire come le parti principali del sistema si adattano insieme, come i messaggi e i dati fluiscono attraverso il sistema e altre preoccupazioni strutturali. I modelli di architettura utilizzano una varietà di tipi di componenti, ciascuno composto tipicamente da moduli successivamente più piccoli. Ogni componente ha una responsabilità all'interno dell'architettura I modelli di progettazione sono modelli di progettazione di livello basso o di classe per particelle più piccole di applicazioni.

Per maggiori informazioni: https://www.oreilly.com/ideas/contrasting-architecture-patterns-with-design-patterns


0

Bene, per la parte principale è una questione di lingua. Secondo la mia esperienza il confine tra design e architettura, per quanto riguarda il software, è un fiume ampio con la sua larghezza derivante dal livello dell'acqua che a sua volta è influenzato principalmente dalle stagioni del marketing. Generalmente il termine "design" è usato con un aspetto forte del comportamento del prodotto software come riconosciuto dagli utenti finali, mentre "architettura" sta per la struttura tecnica di un software, cioè i componenti, le librerie, i protocolli e tutto ciò di cui ha bisogno per soddisfare il design. I "design pattern" assumono due ruoli: primo sono considerati best practice per la risoluzione di una categoria di problemi standard (più o meno), non prodotti; 2 ° aiutano gli sviluppatori a comunicare. Rimanendo con il tuo esempio di Singleton, ci permette di sapere di cosa tratta la meccanica semplicemente usando la parola, invece di spiegare ogni volta, che abbiamo creato una singola istanza usando uno spazio dati designato (variabile o qualsiasi altra cosa) che è impostato in modo controllato ed è garantito l'unico, perché abbiamo protetto il costruttore della classe ecc. Quindi, IMHO, la risposta breve alla tua domanda è: dipende da chi sta parlando. Ha un senso?


0

I Design Patterns differiscono dagli Architectural Patterns nel loro ambito, sono più localizzati, hanno un impatto minore sulla base del codice, hanno un impatto su una sezione specifica della base del codice, ad esempio:

How to instantiate an object when we only know what type needs to be instantiated at run time (maybe a Factory Class?)
How to make an object behave differently according to its state (maybe a state machine, or a Strategy Pattern?)

I modelli architettonici hanno un impatto estensivo sulla base del codice, che molto spesso influisce sull'intera applicazione in senso orizzontale (ovvero come strutturare il codice all'interno di un livello) o verticale (ovvero come una richiesta viene elaborata dagli strati esterni negli strati interni e indietro). Esempi di pattern architettonici: Model-View-Controller, Model-View-ViewModel

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.