검색해야하는 사용자 데이터베이스가 여러 개 있습니다. 사용자는 여러 개의 인스턴스를 가질 수 있으며 사용자가 여러 데이터베이스에서 중복 된지 여부를 확인합니다.메서드 서명 리팩토링
그래서 각 사용자는 클라이언트와 연결되며 필드는 클라이언트가 무엇인지에 따라 다르게 채워집니다. (나는 그것이 옳지 않다는 것을 알고 있지만 이것은 상속 된 어플리케이션이다.) 내 생각은 클라이언트를 매개 변수로 getUserData 메소드에 추가하여 리펙토링하는 것이다. 그러나 나는 이것이 예방 자의 냄새를 바꾸는 것을 깨닫고있다. 디폴트 값을 전달하는 많은 랩퍼 메소드가 있습니다. 또한 클라이언트 객체에 액세스 할 수있을 정도로 충분히 먼 거리에서 호출을 트래버스해야합니다.이 메소드는 5 개 메소드 호출 일 수 있으므로 해당 메소드도 변경해야합니다. 이 시점에서, 앱이 (다른 개발자들에 의해) 개발 된 방식은 이것에 관해서는 매우 까다롭기 때문에 그것을 개선하려고합니다.
있는 getUserData 방법 : 래퍼 방법의
public User getUserData(String userId, boolean fullUserRecord, Date userStartDate){
//retrive userdata from db
//attach client specific data for user
}
예 :
public User getUserData(String userId, Date userStartDate){
getUserData(userId, false, userStartDate)
}
내 질문은 내가 가장이 처리 어떻게 될 것입니다. 현재 메서드 시그니처를 변경하는 토끼 구멍을 찾으러 가고 있지만 다시 변경해야하는 경우 똑같은 일을해야합니다. 재미는 없습니다.
내가 변경하고자하는 메소드 서명에 연결된 다수의 체인 호출이 있기 때문에, 나는 전체 개체를 보존 사용해야합니다 콜 체인의 시작 부분에서 리팩터링을 시작 하시겠습니까? – ephemeralCoder
나는 그 역순을 할 것이다 : 모든 매개 변수를 볼 수있는 바닥에서부터 시작하고 점차적으로 인라인을 시작하라. 또한 많은 매개 변수가 선택적이면 매개 변수 개체에 대한 특수 생성자 또는 메서드 팩터 리를 만들 수 있습니다. 가독성을 높이려면 한 걸음 더 나아가 유연한 작성 도구를 만들 수도 있습니다. – JnRouvignac
나는 전문 생성자를 사용하여 매개 변수 객체를 작성했습니다. 이제 코드가 훨씬 관리하기 쉽습니다. 객체를 더 쉽게 읽을 수 있도록 작성기를 작성해 보겠습니다. 감사! – ephemeralCoder