문제

Pojo를 설정하고 있다고 가정 해 봅시다.

클래스를 설정할 때 무엇을 정의합니까?

여기 내 목록이 있습니다

  • 공급 된 필드가있는 객체를 만들기위한 생성자 (필드를 최종적으로 만들 수 있도록 불변성)
  • 토스트 링
  • 동등합니다
  • 해시 코드
  • 비슷한 구현
  • 방법 받기 (해당되는 경우)
  • 선택 사항] Mutable Fields 용 생성자 복사 - 클래스의 불변성을 보장하기 위해
  • 선택 사항] 필드 및 메소드에 액세스하기위한 인터페이스를 정의합니다.
  • 선택 사항]은 직렬화 가능하고 버전 작성 체계를 구현합니다.

이 과잉 또는 사운드 엔지니어링입니까? 당신이 추가 할 놓칠 수있는 것이 있습니까?

도움이 되었습니까?

해결책

버전 작성 체계를 언급했기 때문에 지속 가능한 수업에 대해 이야기하고 있다고 가정합니다.

나는 당신이 거기에 좋은 목록을 가지고 있다고 말하지만 (ORM 엔진에 따라), 나는 또한 (자동화 된 ID 이외의 값)를 결정하는 경향이 있으며, 어떤 레코드의 '고유성'을 정의합니다.

HASHCODE에서 ID를 사용하는 경우 최대 절전 모드는 세트와 이상한 동작을 가지고 있기 때문에 이것을 언급합니다. 프로세스의 중간에 변경할 수 있기 때문입니다.

또한 컬렉션이 게으르거나 열심이 될 것인지, 특히 토스트 링 방법 (지속성 컨텍스트에서 분리 될 때 토스트 링을 할 때 게으른 유발을 유발할 수 있음)을 살펴볼 시간이 가치가 있다는 점에 주목할 가치가 있습니다.

다른 팁

내가 무엇을하고 싶은지 알고 있다면 일반적으로 테스트를 먼저 작성한 다음 수업을 작성하여 실행하십시오.

그것은 모두 객체가해야 할 일에 달려 있습니다. 예를 들어, 객체가 변하지 않으면 평등과 해시 코드를 구현하지 않거나 비교할 수 없습니다. 직렬화되지 않으면 직렬화 가능하고 버전 작성에 대해 걱정할 필요가 없습니다. 객체가 불변 인 경우 사본 생성자가 필요하지 않습니다.

나는 보통 시스템의 다른 객체가 새로운 개체가 원하는 것을 정의하는 인터페이스로 시작합니다. 해당 인터페이스를 구현하면 나머지 클래스를 존재로 "당기"합니다.

필드가 많으면 건축업자를 고려할 것입니다. 불변성이 중요하다면 그렇게 중요합니다.

이 과잉의 관점에서, 그것은 실제로 사용 케이스에 많은 의존에 달려 있습니다. 이것이 자신의 코드 나 가까운 공동 작업자 중에 사용하기위한 내부 객체라면 예라고 말할 것입니다. 그것은 디자인을 더 어렵게 만들고 (한 필드를 추가하면 얼마나 변화 해야하는지 생각해보십시오)는 사용되지 않는 많은 코드를 생성 할 가능성이 높습니다.

반면에, 당신이 더 큰 분산 프로젝트 또는 공개 API를보고 있다면, 이것이 기초에 부딪친다고 생각합니다. 최소한,이 목록의 모든 것은 궁극적으로 클래스가 변이 될 수 있다고 결정 되더라도 최소한 결정이 지능적으로 이루어졌습니다.

완전한 과잉. yagni를 바르십시오.

클라이언트 코드로 필요한 것을 수행하도록 수업을 설계하고 테스트 할 수 있습니다. 더 이상 아무것도. 도서관을 작성하는 경우 물론 조금 더 완전해야합니다. 그럼에도 불구하고 원칙적으로 커밋에 대해 생각하기 전에 최소한 세 명의 고객이 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top