DesignPatterns

Page last edited 1 428 giorni un'ora fa
Da wiki.betaingegneria.it.

Design Patterns (Modelli di progettazione)[modifica]

Descrizione o modello logico da applicare per la risoluzione di un problema che può presentarsi in diverse situazioni durante le fasi di progettazione e sviluppo del software, ancor prima della definizione dell'algoritmo risolutivo della parte computazionale. Wikipedia

MVC[modifica]

In questi due articoli Trygve Reenskaug dell'Università di Oslo parla della sua invenzione del paradigma Model-View-Editor e della successiva edizione rivista come Model-View-Controller.

Altre risorse sono disponibili qui.

Il paradigma MVC fu usato in modo narurale con il linguaggio di programmazione Smalltalk.

Il pattern è basato sulla separazione dei compiti fra i componenti software che interpretano tre ruoli principali:

  • il model fornisce i metodi per accedere ai dati utili all'applicazione;
  • il view visualizza i dati contenuti nel model e si occupa dell'interazione con utenti e agenti;
  • il controller riceve i comandi dell'utente (in genere attraverso il view) e li attua modificando lo stato degli altri due componenti.

Wikipedia

Naked Objects[modifica]

Tesi di dottorato di Richard Pawson, inventore di Naked Objects.

ORM (Object / Relational Mapping)[modifica]

Pur non essendo un desing pattern in senso stretto (è in un certo senso una procedura progettuale che riguarda solo il Model), l'ORM ha a che fare con la necessità di una mappatura tra come i dati vengono archiviati in un RDBMS e come vengono manipolati dall'applicazione che si fonda su table base dati.

ORM su Hibernate.org

Persistenza[modifica]

Hibernate ORM si occupa di aiutare l'applicazione per realizzare la persistenza. Allora, cos'è la persistenza? Persistenza significa semplicemente che vorremmo che dati della nostra applicazione sopravvivessero all'applicazione stessa. In termini di Java, vorremmo che lo stato di alcuni nostri oggetti vivesse al di là della portata della JVM in modo che lo stesso stato sia disponibile in seguito.

Database relazionali[modifica]

In particolare, Hibernate ORM si occupa della persistenza dei dati in applicazione ai database relazionali (RDBMS). Nel mondo delle applicazioni Object-Oriented c'è spesso una discussione sull'utilizzo di un database ad oggetti (ODBMS) al contrario di un RDBMS. Non abbiamo intenzione di esplorare quella discussione qui. Basti dire che RDBMS rimangono un meccanismo di persistenza molto popolare e sarà così per il prossimo futuro.

L'impedenza di disaccoppiamento oggetto-relazionale[modifica]

L'impedenza di disaccoppiamento oggetto-relazionale (Object-Relational Impedance Mismatch) (a volte chiamata la mancata corrispondenza di paradigma) è solo un modo elegante per dire che i modelli di oggetti e modelli relazionali non funzionano molto bene insieme. I RDBMS rappresentano i dati in formato tabulare (un foglio di calcolo è una buona visualizzazione per chi non ha familiarità con RDBMS), mentre i linguaggi orientati agli oggetti, come Java, li rappresentano come un grafo di oggetti interconnessi. Il caricamento e la memorizzazione di grafi di oggetti utilizzando un database relazionale tabulare ci espone a 5 problemi di disaccoppiamento ...

Granularità[modifica]

A volte si avrà un modello di oggetti che ha più classi rispetto al numero di tabelle corrispondenti nel database (si dice che il modello a oggetti è più granulare rispetto al modello relazionale). Prendiamo ad esempio la nozione di un indirizzo...

I sottotipi (ereditarietà)[modifica]

L'ereditarietà è un paradigma naturale nei linguaggi di programmazione orientati agli oggetti. Tuttavia, il modello RDBMS non definisce nulla di simile (sì, alcuni database hanno supporto al sottotipo ma è completamente non-standard)...

Identità[modifica]

Un RDBMS definisce esattamente un concetto di 'identità': la chiave primaria. Java, tuttavia, definisce sia l'identità tra oggetti a == b che la parità a.equals(b).

Associazioni[modifica]

Le associazioni sono rappresentate come riferimenti unidirezionali nei linguaggi Object Oriented, mentre i RDBMS usano il concetto di chiavi esterne. Se avete bisogno di rapporti bidirezionali in Java, è necessario definire l'associazione per due volte.

Allo stesso modo, non è possibile determinare la molteplicità di un rapporto guardando il modello a oggetti.

Navigazione dei dati[modifica]

Il modo in cui si accede ai dati in Java è fondamentalmente diverso dal modo in cui lo si fa in un database relazionale. In Java, si passa da una associazione ad un altra percorrendo la rete di oggetti.

Questa non è un modalità efficace di recupero dei dati da un database relazionale. In genere si vuole ridurre al minimo il numero di query SQL e quindi caricare diverse entità attraverso JOIN e selezionare le entità in modo mirati prima di iniziare a esplorare la rete degli oggetti.