Izinkan saya mengawali ini dengan mengatakan ini bukan kode saya atau kode rekan kerja saya. Bertahun-tahun yang lalu ketika perusahaan kami lebih kecil, kami memiliki beberapa proyek yang perlu kami lakukan sehingga kami tidak memiliki kapasitas untuk itu, jadi mereka di-outsource. Sekarang, saya tidak menentang outsourcing atau kontraktor pada umumnya, tetapi basis kode yang mereka hasilkan adalah sejumlah besar WTF. Yang sedang berkata, itu (kebanyakan) bekerja, jadi saya kira itu dalam 10% teratas dari proyek outsourcing yang pernah saya lihat.
Seiring berkembangnya perusahaan kami, kami telah mencoba mengambil alih lebih banyak dari pengembangan kami secara langsung. Proyek khusus ini mendarat di pangkuan saya jadi saya sudah membahasnya, membersihkannya, menambahkan tes, dll.
Ada satu pola yang saya lihat berulang-ulang dan tampaknya sangat mengerikan sehingga saya bertanya-tanya apakah mungkin ada alasan dan saya tidak melihatnya. Pola adalah objek tanpa metode publik atau anggota, hanya konstruktor publik yang melakukan semua pekerjaan objek.
Misalnya, (kodenya di Jawa, jika itu penting, tapi saya harap ini menjadi pertanyaan yang lebih umum):
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
}
}
Jika Anda bertanya-tanya, jenis kode ini sering disebut dengan cara berikut:
for(File f : someListOfFiles) {
new Foo(f);
}
Sekarang, saya telah diajarkan sejak lama bahwa objek instantiated dalam satu lingkaran pada umumnya adalah ide yang buruk, dan bahwa konstruktor harus melakukan pekerjaan minimum. Melihat kode ini sepertinya akan lebih baik untuk menjatuhkan konstruktor dan membuat execute
metode statis publik.
Saya memang bertanya kepada kontraktor mengapa itu dilakukan dengan cara ini, dan respons yang saya dapatkan adalah "Kami dapat mengubahnya jika Anda mau". Yang tidak terlalu membantu.
Ngomong-ngomong, apakah ada alasan untuk melakukan hal seperti ini, dalam bahasa pemrograman apa pun, atau apakah ini sekadar pengajuan ke Daily WTF?
public static void main(string[] args)
dan yang pernah mendengar objek, kemudian mencoba untuk menumbuknya bersama.