Quelle est la bonne façon d'injecter une dépendance d'accès aux données lorsque je fais un chargement paresseux?Quelle est la bonne façon d'injecter une dépendance d'accès aux données pour un chargement paresseux?
Par exemple, j'ai la structure de classe suivante
class CustomerDao : ICustomerDao
public Customer GetById(int id) {...}
class Transaction {
int customer_id; //Transaction always knows this value
Customer _customer = null;
ICustomerDao _customer_dao;
Customer GetCustomer() {
if(_customer == null)
_customer = _customer_dao.GetById(_customer_id);
return _customer
}
Comment puis-je obtenir la référence à _customer_dao dans l'objet de la transaction? L'exiger pour le constructeur semble ne pas avoir de sens si je veux que la Transaction ressemble au moins à un POCO. Est-il acceptable que l'objet Transaction référence directement l'Inversion of Control Container? Cela semble aussi gênant aussi.
Comment les frameworks comme NHibernate gèrent-ils cela?
pourrait être plus élégant, mais ce qui est généralement la mise en œuvre j'ai le temps. Il laisse également votre code ouvert à une bibliothèque de plus haut niveau pour gérer le chargement paresseux par réflexion, si vous êtes dans ce genre de chose. – ojrac
Même remarque que ci-dessus: Les services d'injection (et en particulier DAO) ne sont pas une bonne idée. Cela rend l'objet inutilisable sans dépendance, et le rend très difficile à tester. Il rompt mal l'ignorance de la persistance. – thinkbeforecoding
Personnellement, j'essaie d'éviter le scénario où une propriété ('mSupplier') * pourrait être chargée, mais peut-être pas. Cela m'inquiéterait chaque fois que j'utiliserais l'entité: quelqu'un l'a-t-il chargé de manière incomplète, c'est-à-dire que 'mSupplier' est nul mais cela n'aurait pas dû être? Ai-je besoin de vérifications nuls sur 'mSupplier'? Est-ce que ces vérifications nuls ont la chance de déclencher une charge paresseuse? (Certes, je cherche toujours le Saint Graal.) – Timo