¿Cuál es la forma correcta de inyectar una dependencia de acceso a datos cuando realizo una carga diferida?¿Cuál es la forma correcta de inyectar una dependencia de acceso a datos para la carga diferida?
Por ejemplo, he la siguiente estructura de clases
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
}
¿Cómo puedo obtener la referencia a _customer_dao en el objeto de la transacción? Requirirlo para el constructor parece que realmente no tendría sentido si quiero que la transacción parezca un POCO. ¿Está bien que el objeto Transacción haga referencia directamente a la Inversión del Contenedor de Control? Eso también parece incómodo también.
¿Cómo manejan esto marcos como NHibernate?
podría ser más elegante, pero esto es por lo general la implementación tengo tiempo para. También deja su código abierto a alguna biblioteca de nivel superior para manejar la carga diferida por reflexión, si está interesado en ese tipo de cosas. – ojrac
Mismo comentario que el anterior: los servicios de inyección (y especialmente DAO) no son una buena idea. Hace que el objeto no se pueda utilizar sin dependencia y dificulta su comprobación. Se rompe la ignorancia de mala persistencia. – thinkbeforecoding
Personalmente trato de evitar el escenario donde una propiedad ('mSupplier') * podría * cargarse, pero podría no ser así. Eso me tendría preocupado cada vez que utilizo la entidad: ¿alguien lo cargó de manera incompleta, es decir, 'mSupplier' es nulo pero no debería haberlo sido? ¿Necesito verificaciones nulas en 'mSupplier'? ¿Estos controles nulos tienen la posibilidad de desencadenar una carga lenta? (Es cierto que todavía estoy buscando el Santo Grial.) – Timo