최근 Java로 돌아가서 단위 테스트를 추가하기 위해 중간 크기의 프로젝트를 리팩토링했습니다. 싱글 톤과 스태틱을 조롱하는 것이 얼마나 고통 스러운지 깨달았을 때, 나는이 시간 동안 내가 읽은 것을 마침내 "얻었다". (나는 경험을 통해 배워야 할 사람들 중 하나입니다. 아.)
이제 Spring을 사용하여 객체를 만들고 주변을 연결하고 있으므로 static
키워드를 왼쪽과 오른쪽으로 제거 하고 있습니다. (잠재적으로 조롱하고 싶을 때 Math.abs ()와 같은 의미로 실제로 정적이지는 않습니까?) 문제는 static
메서드가 의존하지 않았다는 것을 나타내는 습관을 사용 했습니다. 모든 객체 상태에서. 예를 들면 다음과 같습니다.
//Before
import com.thirdparty.ThirdPartyLibrary.Thingy;
public class ThirdPartyLibraryWrapper {
public static Thingy newThingy(InputType input) {
new Thingy.Builder().withInput(input).alwaysFrobnicate().build();
}
}
//called as...
ThirdPartyLibraryWrapper.newThingy(input);
//After
public class ThirdPartyFactory {
public Thingy newThingy(InputType input) {
new Thingy.Builder().withInput(input).alwaysFrobnicate().build();
}
}
//called as...
thirdPartyFactoryInstance.newThingy(input);
그래서 여기가 손에 닿는 곳이 있습니다. 대문자가 Math.sin (x)와 마찬가지로 ThirdPartyLibraryWrapper.newThingy (x)는 매번 같은 방식으로 같은 방식을 사용한다고 말했기 때문에 이전 방식이 마음에 들었습니다. 객체가 요청한 것을 수행하는 방식을 변경할 객체 상태가 없습니다. 내가 고려하고있는 가능한 답변은 다음과 같습니다.
- 아무도 이런 식으로 느끼지 않아 나에게 문제가 있습니다. 어쩌면 나는 실제로 일을하는 OO 방식을 내면화하지 않았을 것입니다! 어쩌면 나는 Java로 작성하고 있지만 FORTRAN 등을 생각하고 있습니다. (내가 FORTRAN을 쓴 적이 없으므로 인상적 일 것입니다.)
- 어쩌면 코드에 대한 추론을 목적으로 불변성의 프록시로 정적을 사용하고 있습니다. 즉, 누군가 상태를 유지하고 무엇이 아닌지 알기 위해 코드를 유지하기 위해 내 코드에 어떤 단서 가 있어야 합니까?
- 아마도 좋은 객체 은유를 선택하면 이것이 무료로 제공되어야합니까? 예를 들어
thingyWrapper
랩핑 된 상태에 무관 한 상태로 들릴 수있는 것처럼 들리지 않습니다Thingy
. 마찬가지로,thingyFactory
소리가 변하지 않는 것처럼 들리지만 창조 과정에서 다른 전략을 선택할 수 있습니다.