이 코드가 내 코드 나 동료의 코드가 아니라고 말함으로써이 서문을 시작하겠습니다. 몇 년 전 우리 회사의 규모가 더 좁 았을 때, 우리는 용량이 없었기 때문에 필요한 프로젝트를 수행하여 아웃소싱했습니다. 이제는 일반적으로 아웃소싱 또는 계약자에 대해 아무런 조치도 취하지 않았지만 이들이 생성 한 코드베이스는 대량의 WTF입니다. 즉, (주로) 효과가 있기 때문에 내가 본 아웃소싱 프로젝트의 상위 10 %에 있다고 가정합니다.
회사가 성장함에 따라 우리는 개발을 더 많이 집에서 시도했습니다. 이 특정 프로젝트는 내 무릎에 착륙하여 계속 진행하고 청소하고 테스트를 추가하는 등의 작업을 수행했습니다.
많이 반복되는 패턴이 하나 있는데, 이유가 있는지 궁금해서 그것을 보지 못할 정도로 놀라 울 정도로 끔찍한 것 같습니다. 패턴은 공용 메소드 나 멤버가없는 오브젝트이며 오브젝트의 모든 작업을 수행하는 공용 생성자 일뿐입니다.
예를 들어 (코드는 Java로되어 있지만 중요한 경우 더 일반적인 질문이기를 바랍니다).
public class Foo {
private int bar;
private String baz;
public Foo(File f) {
execute(f);
}
private void execute(File f) {
// FTP the file to some hardcoded location,
// or parse the file and commit to the database, or whatever
}
}
궁금한 점이 있다면이 유형의 코드는 종종 다음과 같은 방식으로 호출됩니다.
for(File f : someListOfFiles) {
new Foo(f);
}
오래 전에 루프에서 인스턴스화 된 객체는 일반적으로 나쁜 생각이며 생성자가 최소한의 작업을 수행해야한다는 것을 오래 전에 배웠습니다. 이 코드를 보면 생성자를 삭제하고 execute
공개 정적 메서드를 만드는 것이 더 나은 것처럼 보입니다 .
나는 계약자에게 왜 이런 식으로했는지 물어 보았으며, "원하는 경우 변경할 수 있습니다"라는 응답을 받았습니다. 정말 도움이되지 않았습니다.
어쨌든, 프로그래밍 언어로 이와 같은 일을해야 할 이유가 있습니까? 아니면 Daily WTF에 또 다른 제출입니까?
public static void main(string[] args)
객체 에 대해 알고 알고 들어 본 개발자가 작성한 것으로 보아서 서로 뭉개려고했습니다.