2012-08-09 2 views
0

CMS 개체의 개체 캐시에서 작업 중입니다. 나는 제품과 자식 객체 (옵션과 속성) 사이에 부모/자식 관계를 유지할 필요가있다. 부모 (제품)는 첫 번째 코드 샘플에 나와 있습니다.어떻게이 알고리즘을 일반화 할 수 있습니까?

쉽게 할 수 있지만 제 2 코드 블록 (일반)과 같이 부모에게 자식을 할당하는 방법을 찾고 있습니다.

모든 CMS 개체가 CMSContent를 확장하므로 ProductID를 사용할 수 있습니다. 그러나 메소드 (예 : ProductAttribute)를 generic으로 만들어 메소드에 알고리즘을 넣고 부모 및 자식 객체로 메소드를 호출하여 속성을 할당 할 수있는 방법이 있습니까?

나는 Hibernate와 같은 ORM 프레임 워크가 여기에 적합하다는 것을 알고 있지만, 고정 된 데이터베이스 구조를 가지고 있기 때문에 적합하지 않을 것이다.

public class Product extends CMSContent { 
    private List<ProductAttribute> productAttributes; 
    private List<ProductOptions> productOptions; 

    // getters,setters 
} 

알고리즘을 일치시킵니다.

// attach Product Attributes to Product 
for (Product p : listP) { 
    Map<String, Object> parameters = new HashMap<String, Object>(); 
    for (ProductAttribute po : listPA) { 
     parameters.put("pid", p.getPid()); 
     parameters.put("ref", po.getRid()); 

     int i = jdbcTemplate.queryForInt(sqlAttr, parameters); // select count(*), 1 if matched. 

     if (i == 1) { 
      p.getProductAttributes().add(po); // generic field? 
     } 
    } 
} 
+1

당신이 일반적인 방법 서명이처럼 보이는 어떤 구상 않습니다를 추가 할 수 있어야하지 않을까요? 이 알고리즘의 일반적인 부분이 무엇인지는 분명하지 않습니다. 항상 List 와'Product'를 연결하는 것처럼 보입니다. –

+0

하지만 ProductOption과 Product를 동일한 방식으로 연관시켜야합니다. 하지만 p.getProductAttributes()를 변경해야합니다. p.getProductOption(). add (po);에 add (po)를 추가합니다. 내가 할 수있을 때까지 나는 그것을 일반화 할 수 없다. – EdgeCase

+0

제네릭이 이것을 해결할 도구라고 생각하지 않는다. –

답변

1

public void add(ProductAttribute item){ 
    productAttributes.add(item); 
} 
public void add(ProductOption item){ 
    productOption.add(item); 
} 

제품 도움말에서이 두 가지 방법은 그래서 당신은 단지 ProductAttribute 또는 ProductOption

+0

매우 유망 해 보일지 모르겠지만 지금 당장 실행하고있는 문제는 "추가"가 정의되어 있지 않다는 것이다. 수퍼 유형 (CMSContent) – EdgeCase

관련 문제