Question

Je travaille sur le projet zend, je fais référence à un autre projet zend pour créer le nouveau Zend Je ne Project.But pas comme de suivre aveuglément ce projet sans comprendre. Dans la structure Zend Directory, Dans le modèle de classe il y a principalement deux types de classes que je vois, comme comme dans

- models
   - DbTables
        - Blog.php  //Extends Zend_Db_Table_Abstract
   - Blog.php       // Contains methods like validate() and save()
   - BlogMapper.php // Also Contains methods like validate(Blog b) & save(Blog b)

Pourquoi cette structure spécifique est suivie? Est-ce est de catégorie distincte modèle de classe et la base de données d'objets?

S'il vous plaît expliquer.

Était-ce utile?

La solution

DataMapper est un modèle de conception de modèles d'architecture Enterprise Application .

Le Data Mapper est une couche logicielle qui sépare les objets de la base de données en mémoire. Sa responsabilité consiste à transférer des données entre les deux et aussi de les isoler les uns des autres. Avec Data Mapper les objets en mémoire même pas besoin de savoir qu'il ya une base de données présente; ils ont besoin pas de code d'interface SQL, et certainement aucune connaissance du schéma de base de données.

Comment stocker des données dans une base de données relationnelle est généralement différente de la façon dont vous structurer les objets en mémoire. Par exemple, un objet aura un tableau avec d'autres objets, alors que dans une base de données, votre table aura une clé étrangère à une autre table à la place. En raison de la désadaptation d'impédance objet-relationnel , vous utilisez une couche de médiation entre l'objet de domaine et la base de données. De cette façon, vous pouvez évoluer à la fois sans affecter l'autre.

Séparer la responsabilité de la cartographie dans sa propre couche est également suivre de plus près le unique Responsabilité Principe . Vos objets ne avez pas besoin de connaître la logique DB et vice versa. Cela vous donne une plus grande flexibilité lors de l'écriture du code.

Lorsque vous ne voulez pas utiliser un modèle de domaine, vous avez besoin DataMapper habituellement Do not. Si vos tables de base de données sont simples, vous pourriez être mieux avec un module de table et TableDataGateway ou même ActiveRecord.

Pour d'autres motifs voir ma réponse à

Autres conseils

L'idée d'un modèle est d'envelopper la collection logique de données à l'intérieur de votre code.

L'idée d'un DataMapper est de relier cette collection au niveau de l'application des données avec la façon dont vous le stocker.

Pour beaucoup d'implémentations ActiveRecord, le cadre ne prévoit pas cette séparation d'intention et cela peut conduire à des problèmes. Par exemple, un modèle BlogPost peut conclure les informations de base d'un poste de blog comme

    titre
  • auteur
  • body
  • date_posted

Mais peut-être que vous voulez aussi avoir contenir quelque chose comme:

  • number_of_reads
  • number_of_likes

Maintenant, vous pouvez stocker toutes ces données dans une table MySQL simple pour commencer, mais comme votre blog grandit et vous devenez super célèbre, vous découvrez que vos données statistiques prend énormément de succès et que vous voulez déplacer le tout à un serveur de base de données séparée.

Comment iriez-vous sur la migration de ces champs des objets BlogPost hors d'un magasin de données différent sans changer votre code d'application?

Avec le DataMapper, vous pouvez modifier la façon dont l'objet est enregistré dans la base de données (s) et la façon dont il est chargé à partir de la base de données (s). Cela vous permet de peaufiner le mécanisme de stockage sans avoir à changer la perception réelle de l'information que votre application repose sur.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top