これは私のコードでも同僚のコードでもないということで、これを序文にしましょう。数年前、私たちの会社が小さかったとき、私たちには必要なプロジェクトがいくつかありましたが、その能力はありませんでしたので、それらは外部委託されました。今、私は一般的にアウトソーシングや請負業者に対して何もありませんが、彼らが生産したコードベースは大量のWTFです。とはいえ、(ほとんど)動作するので、私が見た外部委託プロジェクトの上位10%にあると思います。
会社の成長に伴い、社内での開発をさらに進めようとしました。この特定のプロジェクトは私の膝に着地したので、私はそれを調べ、掃除し、テストを追加するなどしてきました。
繰り返し見られるパターンが1つありますが、非常に驚くほどひどいので、理由があるのではないかと思って、見ないだけです。パターンは、パブリックメソッドやメンバーを持たないオブジェクトであり、オブジェクトのすべての作業を行うパブリックコンストラクターにすぎません。
たとえば、(コードが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
、パブリックな静的メソッドを作成する方が良いようです。
私は請負業者になぜそれがこのように行われたのかを尋ねましたが、私が得た応答は「必要に応じて変更できます」でした。これは本当に役に立ちませんでした。
とにかく、プログラミング言語でこのようなことをする理由はありますか、またはこれは単にデイリーWTFへの別の投稿ですか?
public static void main(string[] args)
オブジェクトのことを知っていて、聞いたことがある開発者によって書かれたようで、それらを一緒にマッシュしようとしました。