최근 코드 검토 중에 냄새가 나는 패턴이 들어있는 새로운 동료가 작성한 코드를 발견했습니다. 동료의 결정은 유명한 Clean Code 책 (그리고 아마도 다른 유사한 책들)에 의해 제안 된 규칙에 근거한 것으로 생각됩니다.
클래스 생성자가 전적으로 유효한 객체 생성을 책임지고 주요 작업이 객체의 (비공개) 속성 할당이라는 것을 이해합니다. 물론 선택적 속성 값이 클래스 생성자 이외의 메소드에 의해 설정 될 수도 있지만, 그러한 상황은 다소 드물지만 (나머지 클래스의 나머지가 그러한 속성의 선택성을 고려한다면 반드시 틀릴 필요는 없습니다). 이것은 객체가 항상 유효한 상태임을 보장 할 수 있기 때문에 중요합니다.
그러나 내가 만난 코드에서 대부분의 속성 값은 실제로 생성자 이외의 다른 방법으로 설정됩니다. 계산 결과 값은 속성 전체에 할당되어 클래스 전체의 여러 개인 메서드 내에서 사용됩니다. 저자는 클래스 속성을 필요한 함수에 매개 변수화하는 대신 클래스 전체에서 액세스 할 수있는 전역 변수 인 것처럼 클래스 특성을 사용하는 것 같습니다. 또한 클래스의 메서드는 특정 순서로 호출해야합니다. 클래스는 별다른 영향을 미치지 않기 때문입니다.
이 코드는 큰 매개 변수 목록 (<3 매개 변수)을 피하기 위해 메서드를 짧게 유지 (<= 5 줄)하는 조언에 영감을 받았으며 생성자가 작동하지 않아야한다고 생각합니다 (예 : 일종의 계산 수행) 그것은 객체의 유효성에 필수적입니다).
물론 메소드가 특정 순서로 호출되지 않을 때 모든 종류의 정의되지 않은 오류가 발생할 수 있음을 증명할 수 있다면이 패턴에 대해 사례를 만들 수 있습니다. 그러나 이에 대한 응답은 속성을 설정 해야하는 메소드가 호출되면 속성을 설정 해야하는지 확인하는 유효성 검사를 추가 할 것으로 예상됩니다.
그러나 코드를 완전히 변경하여 클래스가 특정 순서로 (절차 적으로) 호출 해야하는 일련의 메소드가 아닌 실제 객체에 대한 블루 프린트가되도록 제안합니다.
내가 만난 코드가 냄새가 나는 것 같습니다. 사실, 클래스 속성에 값을 저장할 때와 다른 방법을 사용하기 위해 매개 변수에 넣을 때에 대해 분명한 차이점이 있다고 생각합니다. . 나는이 구별에 대한 단어를 찾고 있습니다.