복합 클래스 PharmaProduct
(제약 회사의 제품 계층 구조를 나타냄)과 이에 대한 데이터베이스 테이블이 있다고 가정합니다. 나는 PharmaProduct
객체에 데이터를로드하는 두 가지 방법을 생각해 보았습니다.C# 복합 패턴 및 데이터베이스 액세스
(1) 개체가 인스턴스화 될 때 전체 개체 트리를 구성합니다. 트리를 변경하고 트리에 재귀 루프를 적용하여 변경 내용을 유지합니다 (실제로는 C# DataSet
이 작동하는 방식입니다).
(2) 노드를로드하십시오. 다른 노드를로드하는 경우에만
PharmaProduct GetParent()
또는
List<PharmaProduct> GetChldren()
은 (실제로 데이터베이스에 직접 액세스 할 수있는)이라고합니다. 노드를 변경하십시오. 해당 노드 만 저장하십시오.
이 유형의 테이블에는 제약 회사가 제조하는 품목의 유형에 따라 천개의 항목이있을 수 있습니다. 그래서이 경우, 첫 번째 접근법은 너무 서툴고 (또한 메모리 소비) 나는 생각합니다.
복합 패턴 문제가 발생하면 실제로 데이터베이스 액세스를 어떻게해야합니까?
그러면 CompositeProxy 패턴이됩니다. 이 경우인가요? – anonymous
데이터베이스 액세스 기술에 따라 지연로드가 제품과 함께 제공됩니다. 예를 들어 NHibernate - 당신의 "GetChildren"을 가상으로 만들고, IList를 돌려 주면 곧바로 게으른로드 된 프록시를 얻어야한다. –
flq
@ JMSA, 패턴은 자주 함께 작동합니다. 나는 그걸 들었다는 말을 결코 들어 본 적이 없지만, 누군가가 그랬다면, 그 의미를 알 것입니다. 일반적으로 "나는 컴포지트를 사용하여 컴포지트를 사용하여 지연된 부분을로드합니다"라고 말하고 싶습니다. –