Julie Lerman a récemment souligné qu’Entity Framework peut fonctionner avec des classes ayant des constructeurs et des mutateurs privés.
Le test publié par Julie, montre qu’Entity Framework (EF) est capable d’invoquer un mutateur ou un constructeur privé sans trop de difficultés. Vous pouvez remarquer qu’EF fait cela en se référant à EntityProxyFactory et ses classes connexes, mais il s'agit essentiellement d'une combinaison de reflection et d’IL Emits. NHibernate va plus loin et prend même en charge l’accès aux propriétés privées (discuté également pour EF). Toutefois, les deux exigent actuellement que vous ayez un constructeur par défaut (même s’il n’est pas public).
Cette orientation générale est meilleure parce que, comme le mentionne Julie, elle favorise l’ignorance de persistance.
Architecturalement, Entity Framework et NHibernate supportent l’utilisation des modèles qui permettent d'achever l'ignorance de la persistance :
- Repository
- Unit of work
Entity Framework contient respectivement DbSet et DbContext, alors que NHibernate inclut l’api QueryOver et SessionContext. D'autre part, pour supporter le chargement tardif, ils suivent actuellement le modèle de proxy virtuel qui s’oppose à ce principe (besoin de marquer les propriétés comme virtuelles).
L'ignorance de persistance est généralement considérée comme une bonne pratique, les règles métier peuvent être isolées de la logique de persistance, contrairement, par exemple, lors de l'utilisation du modèle Active Record. Cela permet de maintenir la conception globale simple et facile à tester.