2012-03-02 3 views
3

Long, Double, Date 및 String 필드가있는 응용 프로그램에서 도메인 클래스와 비슷한 클래스가 있다고 가정 해 보겠습니다. 이러한 클래스는 몇 가지 공통 필드와 몇 가지 일반적인 메서드로 기본 클래스를 확장합니다. String 클래스 필드 (getter)에 액세스 할 때마다 반환 된 값 (예 : HTML 태그 제거)을 일부 변경하려고합니다. 문자열 유형의 각 필드에 대해 getter를 구현하는 것보다 나은 방법이 있습니까? 상속 된 필드는 어떻습니까?String 필드 getter의 반환 값 수정

답변

1

Grails가 생성 한 기본 getter/setter 구현을 변경하지 마십시오. 당신은 분명히 여러 곳에서 응용 프로그램을 망칠 것입니다. Grails는 컨벤션 방식을 사용하므로 getters/setter는 확실히 변경되지 않습니다.

필드 제목에 대해 getStrippedTitle() 메서드를 원하는대로 반환하는 메서드를 만듭니다. 이 메소드를 일시적으로 추가 할 수도 있습니다.

+0

답변 해 주셔서 감사합니다. Burt Beckwith가 제공 한 것과 매우 유사하여 내 의견도 여기에 적용됩니다. – Aidas

1

설정 한 값을 변경하거나 설정 한 값과 다른 값을 반환하면 Hibernate를 혼동하게됩니다. 데이터베이스로부터 인스턴스를 로딩 할 때, Hibernate는 1 차 캐시에 원래의 데이터를 유지하고 도메인 객체 인스턴스를 반환하기 때문이다. 플러시 할 때 현재 상태를 원본과 비교하고 변경된 경우 변경 내용을 데이터베이스로 푸시합니다. 그래서 당신이 설정 한 값과 다른 값을 반환하지만 실제로 값을 변경하지 않으면 Hibernate는 그 차이를 알 수 없습니다.

속성을 그대로두고 변경된 데이터를 반환하는 메서드를 만드는 것이 훨씬 좋습니다. 예를 들어 String body 필드가있는 경우 속성 이름 body 또는 getter getBody()을 통해 액세스 할 수 있지만 최대 절전 모드에서 알 수없는 body() 메서드를 만들고 원하는 값을 반환 할 수 있습니다.

+0

귀하의 경고에 동의합니다. 그러나 데이터베이스에 매핑 된 실제 도메인 클래스에 대해서는 여기에서 이야기하지 않습니다. 내가 사용하는 것은 전송 객체 (매우 특정한 상황이 SomeJson 클래스를 사용하여 클라이언트에게 jsons를 형성하고 클라이언트로부터 데이터를 얻는)로 명명 될 수있다. 그리고 이러한 각 클래스의 각 필드에 대해 getter 또는 유사한 함수 메서드를 구현하면 피하려고합니다. 그것이 나에게 매우 새로운 것처럼 성공하지 못한 채 메타 프로그래밍을 시도했다. – Aidas