La mise en œuvre d'un Modèle de Référentiel en Python?

Principalement par curiosité, je suis à la recherche d'un Python cadre ou un exemple pour le Modèle de Référentiel de découplage de la persistance de la logique de la logique de domaine.

Le nom de "Modèle de Référentiel" s'affiche dans le post "Démêler Domaine et la Persistance de la Logique avec la Conservatrice" (Ruby), l'idée vient d'une section de "Domain-Driven Design" livre et Martin Fowler. Le modèle de classe ne contient pas de persistance de la logique, mais plutôt l'application déclare référentiel sous-classes dont les instances agissent comme des collections en mémoire des instances de modèle. Chaque référentiel persiste le modèle de différentes façons, par exemple SQL (divers schéma conventions), à Riak ou d'autres noSQL et à la mémoire (pour la mise en cache). Cadre de conventions de dire référentiel sous-classes nécessitent généralement un minimum de code: il suffit de déclarer "WidgetRepository" sous-classe de SQLRepository serait de fournir une collection qui persiste le modèle Widget à la table DB nommé "widgets" et faire correspondre les colonnes d'attributs des widgets.

Différences par rapport aux autres modèles:

Modèle d'Enregistrement Active: par exemple, l'ORM de Django. L'application définit simplement le modèle de classe avec le domaine de la logique et de certaines métadonnées pour la persistance. L'ORM ajoute la persistance de la logique de la classe du modèle. Cette mélanges de domaine et de la persistance dans une classe (indésirables selon le poste).

Grâce à @marcin je vois que lors de l'Enregistrement Actif prend en charge divers backends et .enregistrer(à l'aide d'="other_database") de la fonction, que donne le multi-backend avantage du Modèle de Référentiel.

Donc, en un sens, le Modèle de Référentiel est juste comme Active Record, avec la persistance de la logique déplacé à une catégorie distincte.

Motif de Mapper des données: par exemple, SQLAlchemy Classique de Mappages. L'application définit des classes supplémentaires pour table de base de données(s), et de mapper des données(s) de modèle à table(s). Ainsi, le modèle de l'instance peuvent être mappées à des tables dans de multiples façons, par exemple, à l'appui de l'héritage des schémas. Ne pense pas que SQLAlchemy fournit les cartographes à la non-SQL de stockage.

Quelle est ta recherche? Je viens de facilement googlé un certain nombre de solutions de rechange.
Googler pour python "repository pattern" ne sont pas tous les implémentations. Qu'est-ce exactement avez-vous recherché?
google.co.uk/search?q=django+orm+backend
il n'y a aucune questions sur StackExchange - ils principalement sur NHibernate
Autant que je sache, l'ORM de Django génère le SQL (une représentation uniquement) pour chaque modèle. Modèle de référentiel otoh, que fournit la collection de classes pour chaque backend (par exemple, SQL, MongoDB, de mémoire), sous-classé pour fournir de multiples façons de conserver le modèle.

OriginalL'auteur Graham | 2012-03-14