2009-08-20 11 views
21

Nel suo libro "Patterns of Enterprise Application Architecture", Martin Fowler parla di schemi di persistenza che si trovano comunemente nello sviluppo di software e in particolare in relazione agli ORM.Quale modello segue Hibernate?

Esiste uno schema a cui Hibernate aderisce maggiormente?

risposta

14

Hibernate fanno uso di diversi modelli:

(collezioni proxing)
  • carico pigro
  • unità di lavoro (come parte dell'oggetto Session)
  • probabilmente Identità Mappa o qualcosa più sofisticato
  • Metadati di mappatura
  • Query Object per Criterion API
  • tutti gli oggetti relazionali modelli structual
+0

Il carico pigro può bruciarti - richiede una sessione aperta per risolvere :) – extraneon

+1

Sembra seguire tutti questi schemi ma al livello superiore sono incline a concordare di più con jpartogi o duffymo che in termini di grande l'immagine sembra seguire sia il modello di dominio che il data mapper. Il mappatore dei dati – yuos

2

Se siete alla ricerca di modelli di progettazione esplicitamente, allora si potrebbe prendere in considerazione un Hibernate API di fantasia per l'attuazione del Active Record Pattern:

Nell'ingegneria del software, il modello di registrazione attivo è un motivo di progettazione trovato frequentemente nel software che memorizza i suoi dati in r banche dati elazionali . È stato chiamato da Martin Fowler nel suo libro Patterns of Enterprise Application Architecture. L'interfaccia di un tale oggetto sarebbe includere funzioni come inserto, Update e Delete, più proprietà che corrispondono più o meno direttamente alle colonne nella sottostante tabella di database.

Il record attivo è un approccio a che accede ai dati in un database. Una tabella o una vista del database è inclusa nella classe ; quindi un'istanza dell'oggetto è legata a una singola riga nella tabella. Dopo la creazione di un oggetto, una nuova riga viene aggiunta alla tabella al salvataggio. Qualsiasi oggetto caricato riceve le sue informazioni dal database; quando un oggetto è aggiornato a , viene aggiornata anche la riga corrispondente nella tabella . La classe wrapper implementa i metodi di accesso o le proprietà per ogni colonna nella tabella o vista .

+5

sembra più vicino del record attivo, come ha sottolineato jpartogi. saresti d'accordo? – yuos

+0

Se Hibernate ha seguito la registrazione attiva, non è stato in grado di farlo: "Persistenza idiomatica --- Hibernate consente di sviluppare classi persistenti seguendo idiomi naturali orientati agli oggetti, tra cui ereditarietà, polimorfismo, associazione, composizione e framework delle collezioni Java. interfacce o classi di base per le classi persistenti e consente a qualsiasi classe o struttura di dati di essere persistente. " – juanitogan

8

Hibernate non segue il pattern di ActiveRecord. Il modello che Hibernate aderisce più da vicino è il pattern Datamapper.

+0

la risposta di duffymo che segue il modello di dominio sembra valida. È possibile che entrambi voi siate corretti? – yuos

+0

Qualche anno di ritardo ma, comunque. Hibernate fornisce un meccanismo per Object-Relational Mapping (ORM); è un framework ORM. Se si guarda la descrizione del pattern Data Mapper, è praticamente uguale al concetto di ORM. –

1

Hibernate è ovviamente domain model. Gli oggetti in ORM sono il modello di dominio, quindi non puoi fare ORM senza di esso.

+0

La risposta di jpartogi che segue Data Mapper sembra valida. È possibile che entrambi voi siate corretti? – yuos

+1

Data Mapper sarebbe un modo per traghettare i valori da un ResultSet e in un oggetto. Direi che Data Mapper si concentra sull'estrazione di una riga su un oggetto, ma ORM compie il passo ulteriore di gestire problemi più complessi come le relazioni 1: meem: n, il caricamento lazy, il caching, ecc. Modello di modello di dominio – duffymo

+0

definire qualsiasi cosa sulla persistenza. In alcune pratiche come Domain Driven Design, i modelli di dominio sono persino obbligati a essere ostinatamente ostinati. –

Problemi correlati