2011-03-11 2 views
0

내 제목은 약간의 차이입니다. 여기에 제가 이야기하는 문제가 있습니다. 동작이 행마다 달라질 필요가있는 테이블을 나타내는 클래스

내가 설정했다고 가정하면 유지

class Bill 
{ 
    public String legislationID; 
    public BillStatus currentStatus; 
} 

//and 

class BillStatus 
{ 
    public String description; 
} 

는 BillStatus 입법 조각 가능 상태 당 하나의 행으로 테이블에 대응한다. (예 : "On House Floor", "On Senate Floor"등). 즉시 행동이 BillStatus의 어떤 인스턴스가 빌에 연결된에 따라 다를 시작으로

이 모든 것이 표현하기 어려워진다 :

난 항상로 실행 문제는 이것이다. 두 가지 옵션이 있습니다 :

1) 현재 BillStatus에 따라 분기 동작이 많은 Bill의 스위치 2) Bill을 매개 변수로 사용하는 bill 상태의 메소드와 인스턴스의 ID에 따라 다른 논리를 실행하는 스위치가있는 스위치 . (공용 인터페이스를 구현하는 클래스를 모방하는 종류의)

이 두 가지 방법 모두 엉뚱한 것처럼 보입니다. 그런 다음

class abstract BillStatus 
{ 
    public abstract String getDescription(); 
    public abstract void callForVote(Bill bill); 
} 

: 내가 할 수있을 싶은 것은 이것이다

@SpecialEntityTag(whenRowValue="HOUSEFLOOR") 
class BillStatusHouseFloor extends BillStatus 
{ 
    /* special overrides for some methods */  
} 

class BillStatusGeneric extends BillStatus 
{ 
    /* standard implementation of BillStatus */ 
} 

이 공통의 문제가 될 수있다. 내가 잘못 생각하고 있니? 기본적으로 목표는 프리미티브가 아닌 자식 속성의 특정 값으로 변경되는 동작을 캡슐화하는 것입니다.

+0

작동하지 않는 또 다른 해결책 : 각 주별 청구서에 대한 하위 클래스의 Bill이있을 수 있습니다. Bill의 행동에 영향을주는 상태와 유사한 속성이 3 가지 이상 존재하기 때문에 제 경우에는 작동하지 않습니다. 이것은 내가 [재산 1의 집계] * [재산 2의 집계] * [부동산 3의 집계] 하위 법안을 필요로 함을 의미합니다. – user426724

답변

0

무엇이 디자인을 사용하지 못하도록합니까?

Hibernate (또는 JPA는 일반적으로) 상속을 처리 할 수 ​​있으며 특정 테이블에 어떤 하위 클래스를 사용할 것인지를 알려주는 discriminator 열을 사용하여 하나의 테이블에 전체 상속 계층 구조를 저장할 수 있습니다.

자세한 내용은 http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html_single/#inheritance-tableperclass을 참조하십시오.

+0

ㅎ 나는 거기에 약간의 얼굴 표정을 가지고 있었다. 나는 늦은 밤 프로그래밍을하지 말아야한다. 감사! – user426724

관련 문제