2009-08-20 9 views
21

Dans son livre «Patterns of Enterprise Application Architecture», Martin Fowler parle de modèles de persistance que l'on trouve couramment dans le développement de logiciels et particulièrement en relation avec les ORM.Quel modèle suit Hibernate?

Y a-t-il un motif auquel Hibernate adhère le plus étroitement?

Répondre

14

Hibernate faire usage de plusieurs modèles:

  • charge Lazy (proxing collections)
  • Unité de travail (dans le cadre de l'objet de session)
  • probablement Identité Carte ou quelque chose plus sophistiqué
  • Cartographie des métadonnées
  • de requête objet pour API Criterion
  • objets tous les modèles Structual relationnelles
+0

La charge paresseuse peut vous brûler - il faut une session ouverte pour résoudre :) – extraneon

+1

Il semble suivre tous ces modèles, mais au niveau supérieur, je suis enclin à être plus d'accord avec jpartogi ou duffymo qu'en termes de grand image il semble suivre soit le modèle de domaine ou le mappeur de données. – yuos

2

Si vous cherchez des modèles de conception explicity, alors vous pourriez envisager Hibernate une API de fantaisie pour la mise en œuvre du Active Record Pattern:

En génie logiciel, le modèle d'enregistrement actif est un modèle de conception souvent trouvé dans les logiciels que stocke ses données dans r bases de données. Il a été nommé par Martin Fowler dans son livre Patterns of Enterprise Application Architecture. L'interface à un tel objet aurait inclure des fonctions telles que Insertion, Update et Delete, ainsi que des propriétés qui correspondent plus ou moins directement aux colonnes dans la table de base de données sous-jacente .

Enregistrement actif est une approche de accédant aux données dans une base de données. Une table ou vue de base de données est enveloppée dans une classe; Ainsi, une instance d'objet est liée à une seule ligne de la table. Après la création d'un objet, une nouvelle ligne est ajoutée à la table lors de la sauvegarde. Tout objet chargé obtient ses informations de la base de données; Lorsqu'un objet est mis à jour, la ligne correspondante dans la table est également mise à jour. La classe wrapper implémente des méthodes d'accès ou des propriétés pour chaque colonne de la table ou de la vue .

+5

Le mappeur de données semble plus proche de l'enregistrement actif, comme l'a souligné jpartogi. accepteriez-vous? – yuos

+0

Si Hibernate suivait l'enregistrement actif, il ne pouvait pas faire ceci: "Persistance idiomatique --- Hibernate vous permet de développer des classes persistantes en suivant des idiomes orientés objet naturels incluant l'héritage, le polymorphisme, l'association, la composition et le framework de collections Java. interfaces ou classes de base pour les classes persistantes et permet à toute classe ou structure de données d'être persistante. " – juanitogan

8

Hibernate ne suit pas le modèle ActiveRecord. Le motif auquel Hibernate adhère le plus étroitement est le motif Datamapper.

+0

La réponse de duffymo qu'il suit le modèle de domaine semble valide. Est-il possible que vous avez tous les deux raison? – yuos

+0

Quelques années de retard mais, de toute façon. Hibernate fournit un mécanisme pour Object-Relational Mapping (ORM); C'est un cadre ORM. Si vous regardez la description du modèle Data Mapper, c'est à peu près la même chose que le concept d'ORM. –

1

Hibernate est évidemment domain model. Les objets dans ORM sont le modèle de domaine, donc vous ne pouvez pas faire ORM sans cela.

+0

La réponse de jpartogi qui suit que Data Mapper semble valide. Est-il possible que vous avez tous les deux raison? – yuos

+1

Data Mapper serait un moyen de transporter des valeurs hors d'un ResultSet et dans un objet. Je dirais que Data Mapper se concentre sur l'extraction d'une ligne vers un objet, mais ORM prend l'étape supplémentaire de traiter des problèmes plus complexes tels que les relations 1: m et m: n, le chargement paresseux, la mise en cache, etc ... – duffymo

+0

définir quelque chose sur la persistance. Dans certaines pratiques comme Domain Driven Design, les modèles de domaine sont même forcés d'être agnostiques de persistance. –

Questions connexes