정적 내부 빌더 클래스 사용의 이점


9

회사의 코드 지침을 작성하는 동안 텔레스코픽 생성자 대신 Effective Java 의 Builder 패턴 을 사용하는 것이 좋습니다 .

그러나 조금 더 생각한 후에는 더 우아한 해결책은 빌더 클래스를 제거하고 선택적 인수로 추가 생성자를 제거하는 것입니다.

따라서 필요한 매개 변수, 일반 getter / setter가있는 생성자가 하나만 있고 코드에 주석을 추가하십시오. 구현할 때 yr 객체의 새 인스턴스를 만든 다음 값을 설정하십시오.

필자의 원래 생각은 어떤 매개 변수가 선택적이고 무엇이 필요한지에 대한 혼란을 제거함으로써 얻는 이점이었다. 그러나 진정한 이점은 메소드 체인 / 유창한 인터페이스를 사용하는 것입니다.

빌더 패턴은 ide가 레그 작업을 수행 할 수 있고 많은 (15+) 선택적 매개 변수가있는 경우 많은 새 인스턴스를 작성할 때 이점이 있습니다. 그러나 정적 내부 클래스를 코딩하는 데 추가 시간이 걸리는가, 빌더 사용을 권장합니까, 아니면 시간 낭비입니까?


답변:


8

필자는 생성자가 유효 하고 일관된 객체 를 만드는 데 필요한 모든 필수 값을 제공해야하는 패턴을 따르는 경향이 있습니다 . 선택적 값의 경우 가장 일반적인 기본값이 무엇인지 생각하여 세터가 가능한 한 적게 사용되도록합니다.

선택적 값이 많거나 더 많은 선택적 값이 기본값에서 변경되는 경향이있는 경우 빌더 패턴 (정적 내부 빌더 또는 기타 유사한 디자인)을 사용합니다.

Josh는 일반적으로 꽤 좋은 조언을합니다. 내가 좋아하는 가장 좋은 점은 조언이 트렌치에서 나온다는 것입니다. 그는 Java의 일부를 디자인하는 데 실수를했다는 사실을 인정하고 Effective Java는 부분적으로 일종의 '치료'입니다. 말하기 :-)


1
이것은 왜 내부가 정체되어야하는지에 대해 아무 말도하지 않습니다 ...
Jimmy Hoffa

불변성과 부작용이없는 것도 목표입니다.
Martijn Verburg

6

Josh Bloch의 Builder 패턴은 GoF Builder 패턴과 마찬가지로 긴 체인 생성자 목록없이 많은 기본 데이터 로 불변 개체를 생성하는 방법을 제공합니다 .

"필수 매개 변수, 일반 getter / setters를 가진 하나의 생성자가있는 경우"더 이상 개체를 변경할 수 없습니다. 즉. 인스턴스화 한 후 오랫동안 변경할 수 있습니다.

이것이 문제가되지 않으면 처음에는 빌더 패턴이 필요하지 않은 것입니다. 문제가 있으면 솔루션에 결함이있는 것입니다.


빌더 패턴이 변경 가능성과 관련이 없다고 생각합니다 .wiki의 gof 예제 도 변경할 수 있습니다 ... en.wikipedia.org/wiki/Builder_pattern#Java 또한 패턴에는 질문에 요약 된 이점이 있습니다.
NimChimpsky

3
@NimChimpsky : 빌더 패턴을 적용하여 변경 가능한 객체를 만들 수 있는지 여부는 문제가되지 않습니다. 문제는, 당신은해야합니까? 게터와 세터는 영원을 위해 존재 해 왔으며, 객체를 변경할 수있는 곳은 완벽하게 견고한 솔루션이지만 사람들은 불변의 객체를 만드는 데 공통적 인 문제가 발생했습니다 : 관리 할 수없는 생성자 체인. 빌더는 일반적인 솔루션이되어 의사 소통을 용이하게하는 패턴이되었습니다.
pdr
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.