Long, Double, Date 및 String 필드가있는 응용 프로그램에서 도메인 클래스와 비슷한 클래스가 있다고 가정 해 보겠습니다. 이러한 클래스는 몇 가지 공통 필드와 몇 가지 일반적인 메서드로 기본 클래스를 확장합니다. String 클래스 필드 (getter)에 액세스 할 때마다 반환 된 값 (예 : HTML 태그 제거)을 일부 변경하려고합니다. 문자열 유형의 각 필드에 대해 getter를 구현하는 것보다 나은 방법이 있습니까? 상속 된 필드는 어떻습니까?String 필드 getter의 반환 값 수정
답변
Grails가 생성 한 기본 getter/setter 구현을 변경하지 마십시오. 당신은 분명히 여러 곳에서 응용 프로그램을 망칠 것입니다. Grails는 컨벤션 방식을 사용하므로 getters/setter는 확실히 변경되지 않습니다.
필드 제목에 대해 getStrippedTitle() 메서드를 원하는대로 반환하는 메서드를 만듭니다. 이 메소드를 일시적으로 추가 할 수도 있습니다.
설정 한 값을 변경하거나 설정 한 값과 다른 값을 반환하면 Hibernate를 혼동하게됩니다. 데이터베이스로부터 인스턴스를 로딩 할 때, Hibernate는 1 차 캐시에 원래의 데이터를 유지하고 도메인 객체 인스턴스를 반환하기 때문이다. 플러시 할 때 현재 상태를 원본과 비교하고 변경된 경우 변경 내용을 데이터베이스로 푸시합니다. 그래서 당신이 설정 한 값과 다른 값을 반환하지만 실제로 값을 변경하지 않으면 Hibernate는 그 차이를 알 수 없습니다.
속성을 그대로두고 변경된 데이터를 반환하는 메서드를 만드는 것이 훨씬 좋습니다. 예를 들어 String body
필드가있는 경우 속성 이름 body
또는 getter getBody()
을 통해 액세스 할 수 있지만 최대 절전 모드에서 알 수없는 body()
메서드를 만들고 원하는 값을 반환 할 수 있습니다.
귀하의 경고에 동의합니다. 그러나 데이터베이스에 매핑 된 실제 도메인 클래스에 대해서는 여기에서 이야기하지 않습니다. 내가 사용하는 것은 전송 객체 (매우 특정한 상황이 SomeJson 클래스를 사용하여 클라이언트에게 jsons를 형성하고 클라이언트로부터 데이터를 얻는)로 명명 될 수있다. 그리고 이러한 각 클래스의 각 필드에 대해 getter 또는 유사한 함수 메서드를 구현하면 피하려고합니다. 그것이 나에게 매우 새로운 것처럼 성공하지 못한 채 메타 프로그래밍을 시도했다. – Aidas
- 1. 웹 서비스 반환 값 수정
- 2. Axapta : 양식 필드 값 수정
- 3. 속성 getter의 반환 값에서 클래스 인스턴스화
- 4. Bundle.getString (String key)의 디폴트 값
- 5. setter의 매개 변수 유형이 getter의 반환 유형과 일치합니까?
- 6. 단순한 대리자 인 경우 getter의 반환 값을 캐시해야합니까?
- 7. 반환 값
- 8. PHP 로그인 반환 값
- 9. 반환 값
- 10. 반환 값
- 11. 반환 값
- 12. 반환 값
- 13. 반환 값
- 14. 반환 값
- 15. SELECT 문 (TSQL)의 반환 값 수정 [쿼리 최적화]
- 16. 양식 입력 필드 수정
- 17. 쿠키 내의 필드 수정
- 18. Django ModelForms 필드 수정
- 19. C# 함수의 값 반환
- 20. 필드의 필드 값 수정 방법 - Drupal 7의 field_myfield.tpl.php
- 21. SOLR ScriptTransformer 반환 값
- 22. Listpicker 및 반환 값
- 23. WebGl 유니폼 반환 값
- 24. 다른 함수에 값 반환
- 25. 팝업 창 반환 값
- 26. Java : 반환 값 문제
- 27. 필드 값 가져 오기
- 28. 메서드에서 여러 값 반환
- 29. 수익률 반환 값 null
- 30. IF 문에서 값 반환
답변 해 주셔서 감사합니다. Burt Beckwith가 제공 한 것과 매우 유사하여 내 의견도 여기에 적용됩니다. – Aidas