L'ignorance de la persistance est généralement définie comme la capacité à persister & récupération standard .NET les objets (ou POCOs si vraiment vous insistez sur le fait de donner un nom). Et apparemment bien acceptée définition d'une norme .NET de l'objet est:
"...les classes ordinaires où vous vous concentrez sur le problème de l'entreprise à portée de main sans ajouter des trucs pour les infrastructures liées à des raisons..."
Cependant, je vois des gens décrivant NHibernate comme un cadre qui permet à l'ignorance de la persistance, et pourtant, c'est un cadre qui ne peuvent pas travailler sur tout standard .NET objet, une seule norme .NET les objets qui respectent notamment les exigences de conception, par exemple (source):
- Toutes les classes doivent avoir un constructeur par défaut
- Certaines fonctionnalités ne fonctionnent pas à moins que les classes sont scellés et tous les membres sont virtuels
- L'identité de l'objet ne fonctionne pas correctement si l'abus est Égal à/GetHashCode
(Aparté: Avant que quelqu'un s'énerve, je ne veux pas prendre sur NHibernate ici, c'est juste l'un des plus fréquemment citée en exemple d'un cadre qui est censé être permis de l'ignorance de la persistance. Je suis sûr que des arguments similaires peuvent être appliquées à d'autres Orm qui prétendent la même chose.)
Maintenant, bien que la classe en elle-même n'a pas de persistance-cadre spécifique des attributs ou des classes de base, etc., pour moi, il n'est pas vraiment "la persistance des ignorants", car il doit suivre un ensemble de lignes directrices de conception pour faciliter l'utilisation, par l'infrastructure de persistance. Vous devez concevoir et de mettre en œuvre la classe avec les exigences de la persistance de cadre à l'esprit; si vous êtes ignorants de la classe ne peut pas travailler avec elle.
Où je vais avoir des problèmes avec la définition de "l'ignorance de la persistance"/"POCO", c'est que je ne vois pas comment, sur le plan conceptuel, c'est vraiment différent de l'ajout d'attributs tels que l' [Serializable]
ou [DataContract]
ou [XmlType]
ou de toute autre persistance-cadre-des annotations spécifiques qui facilitent la persistance et la récupération de l'entité à l'aide de ce cadre.
Alors, quelle est exactement la "persistance de l'ignorance"?
Clairement la définition de celui-ci comme étant capables de persister "les classes ordinaires" est une erreur car le NHibernate n'ordinaire dans la mesure où pas référence à un cadre spécifique des classes, alors qu'ils sont extraordinaires dans la mesure où ils nécessitent une conception inhabituelle de choix tels que les constructeurs par défaut et tous les membres virtuels et est Égal à/GetHashCode implémentations sur mutable types.
Est-il donc raisonnable de dire que "l'ignorance de la persistance" est vraie lorsque les objets de faciliter l'utilisation d'une infrastructure de persistance (que ce soit dans la conception et la structure ou par utilisation d'un cadre spécifique des annotations), mais ne pas effectuer toute persistance de la logique d'eux-mêmes?