2012-02-06 12 views
2

예를 들어 JPA 또는 Hibernate 코드를 작성할 때 도메인 클래스의 하위 항목 인 Account를 만들 수 있습니다. 내려온 버전은 사용자에게 보여주는 양식을 나타냅니다. 양식에는 계정에있는 약 절반의 필드 만 있습니다. 그래서 폼 값을 유지하는 데 사용하는 객체가 다른 필드를 변경해서는 안됩니다.주석을 변경하기 위해 Java에서 하위 클래스를 만드는 것이 좋지 않습니까?

상속을 사용하여 잘못된 것으로 간주되는 특수 효과를 변경하고 있습니까? 그것이 아니라고 가정 할 때, 더 좋게 또는 더 효과적으로하기 위해 좋은 짧은 손이나 디자인 패턴이 있습니까?

답변

2

여기에 설명하는 사례 (적어도 내가 어떻게 이해했는지)는 하위 클래스를 만드는 데 적합하지 않다고 말하고 싶습니다.

기본적으로 엔티티의 일부 필드/연결 만 변경하도록 양식을 제한하고 싶습니다. 맞습니까? 또한 편집 가능한 필드 만 변경되므로 양식의 개발자를 신뢰하지 않으므로이를 제한해야한다는 요구 사항이 있습니다.

그런 경우, 하나의 옵션은 DTO pattern (데이터 전송 개체)을 사용하는 것일 수 있습니다. 양식 데이터에 대한 DTO를 만들고 사용자가 해당 필드를 채우도록 할 수 있습니다. 그런 다음 DTO를 서비스에 전달하여 적절하게 엔티티를 업데이트합니다. 이렇게하면 편집 가능한 필드와 업데이트 수행 방법을 제어 할 수 있습니다.

편집 할 수없는 필드에 대한 setter가 호출 될 때 예외를 throw하는 엔터티의 래퍼를 만드는 또 다른 방법이있을 수 있습니다. 그러나 그것은 런타임 솔루션이 될 것이고 DTO 접근 방식을 선호 할 것입니다.

편집 : 당신은 아직도의 서브 클래스를 표현해야 할 것

  • 를 서브 클래스는하지만, 실체를 대변하지 않습니다 :

    상속이 경우 문제가 될 수있는 몇 가지 이유 데이터베이스 (discriminators 또는 추가 테이블을 통해)

  • 해당 양식에 의해 생성 된 엔티티는 항상 하위 클래스가 있으므로 다른 장소에서 편집 할 수 없습니다 (데이터베이스가 엉망이 아닌 한)
  • 엔터티는 데이터 컨테이너이며 프레젠테이션에 의존해서는 안됩니다. 따라서 하나의 UI 용도 (귀하의 경우 양식)에 대한 특수한 엔티티 (서브 클래스)를 갖는 것은 모델/데이터와 뷰/프리젠 테이션 계층 간의 단일 책임 원칙 및 추상화를 위반하게됩니다.
관련 문제