2009-10-19 5 views
1

복합 클래스 PharmaProduct (제약 회사의 제품 계층 구조를 나타냄)과 이에 대한 데이터베이스 테이블이 있다고 가정합니다. 나는 PharmaProduct 객체에 데이터를로드하는 두 가지 방법을 생각해 보았습니다.C# 복합 패턴 및 데이터베이스 액세스

(1) 개체가 인스턴스화 될 때 전체 개체 트리를 구성합니다. 트리를 변경하고 트리에 재귀 루프를 적용하여 변경 내용을 유지합니다 (실제로는 C# DataSet이 작동하는 방식입니다).

(2) 노드를로드하십시오. 다른 노드를로드하는 경우에만

PharmaProduct GetParent() 

또는

List<PharmaProduct> GetChldren() 

은 (실제로 데이터베이스에 직접 액세스 할 수있는)이라고합니다. 노드를 변경하십시오. 해당 노드 만 저장하십시오.

이 유형의 테이블에는 제약 회사가 제조하는 품목의 유형에 따라 천개의 항목이있을 수 있습니다. 그래서이 경우, 첫 번째 접근법은 너무 서툴고 (또한 메모리 소비) 나는 생각합니다.

복합 패턴 문제가 발생하면 실제로 데이터베이스 액세스를 어떻게해야합니까?

답변

1

Proxy 패턴을 살펴보십시오. 이 도구를 사용하면 PharmaProduct과 같은 인터페이스를 가진 PharmaProductProxy 개체를 트리에 넣을 수 있지만 액세스 할 때 지연로드됩니다.

+0

그러면 CompositeProxy 패턴이됩니다. 이 경우인가요? – anonymous

+1

데이터베이스 액세스 기술에 따라 지연로드가 제품과 함께 제공됩니다. 예를 들어 NHibernate - 당신의 "GetChildren"을 가상으로 만들고, IList 를 돌려 주면 곧바로 게으른로드 된 프록시를 얻어야한다. – flq

+1

@ JMSA, 패턴은 자주 함께 작동합니다. 나는 그걸 들었다는 말을 결코 들어 본 적이 없지만, 누군가가 그랬다면, 그 의미를 알 것입니다. 일반적으로 "나는 컴포지트를 사용하여 컴포지트를 사용하여 지연된 부분을로드합니다"라고 말하고 싶습니다. –