지연로드를 수행 할 때 데이터 액세스 종속성을 주입하는 적절한 방법은 무엇입니까? 예를 들어지연로드에 대한 데이터 액세스 종속성을 주입하는 적절한 방법은 무엇입니까?
나는
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
}
어떻게 참조가 트랜잭션 객체로 _customer_dao 다음 클래스 구조를받을 수 있나요 있나요? 생성자에 대해이를 요구하면 트랜잭션을 적어도 POCO처럼 보이게하려면 실제로 이해가되지 않는 것처럼 보입니다. 트랜잭션 객체가 Inversion of Control 컨테이너를 직접 참조하도록해도 괜찮습니까? 그것은 또한 어색해 보인다.
NHibernate와 같은 프레임 워크는 어떻게 처리합니까?
이 더 우아한 될 수 있지만, 보통 내가 시간을 구현입니다 : 나는 여기에 대해 블로그. 그것은 또한 당신의 코드를 리다이렉션에 의한 lazy-loading을 처리 할 수있는 좀 더 높은 레벨의 라이브러리로 개방합니다. – ojrac
위와 같은 발언 : 서비스 (특히 DAO)를 주입하는 것은 좋은 생각이 아닙니다. 의존성없이 객체를 사용할 수 없도록 만들고 테스트하기가 매우 어렵습니다. 그것은 끔찍한 끈기를 깨뜨립니다. – thinkbeforecoding
나는 개인적으로 속성 ('mSupplier') *이로드 될 수도있는 시나리오를 피하려고하지만 그렇지 않을 수도 있습니다. 엔티티를 사용할 때마다 걱정이됩니다. 누군가 불완전하게로드 했습니까? 예를 들어'mSupplier'는 null이지만 그럴 수 없었습니까? 'mSupplier'에 널 체크가 필요합니까? 이러한 null 검사가 지연로드를 트리거 할 가능성이 있습니까? (틀림없이 나는 여전히 성배를 찾고 있습니다.) – Timo