Saya baru-baru ini melakukan refactoring proyek berukuran sedang di Jawa untuk kembali dan menambahkan tes unit. Ketika saya menyadari betapa sakitnya mengejek para lajang dan statika, saya akhirnya "mendapatkan" apa yang telah saya baca tentang mereka selama ini. (Saya salah satu dari orang-orang yang perlu belajar dari pengalaman. Oh well.)
Jadi, sekarang saya menggunakan Spring untuk membuat objek dan menyambungkannya ke sekitar, saya menyingkirkan static
kata kunci kiri dan kanan. (Jika saya berpotensi ingin mengejeknya, itu tidak benar-benar statis dalam arti yang sama dengan Math.abs () adalah, kan?) Masalahnya adalah, saya sudah terbiasa menggunakan static
untuk menunjukkan bahwa suatu metode tidak mengandalkan pada keadaan objek apa pun. Sebagai contoh:
//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);
Jadi, di sinilah ia menjadi sensitif. Saya menyukai cara lama karena huruf kapital mengatakan kepada saya bahwa, sama seperti Math.sin (x), ThirdPartyLibraryWrapper.newThingy (x) melakukan hal yang sama dengan cara yang sama setiap kali. Tidak ada status objek untuk mengubah bagaimana objek melakukan apa yang saya minta. Berikut adalah beberapa kemungkinan jawaban yang saya pertimbangkan.
- Tidak ada orang lain yang merasakan hal ini sehingga ada yang salah dengan saya. Mungkin saya belum benar-benar menginternalisasi cara OO dalam melakukan sesuatu! Mungkin saya menulis di Jawa tetapi berpikir dalam FORTRAN atau semacamnya. (Yang akan mengesankan karena saya belum pernah menulis FORTRAN.)
- Mungkin saya menggunakan staticness sebagai semacam proksi untuk imutabilitas untuk keperluan penalaran tentang kode. Yang sedang berkata, petunjuk apa yang harus saya miliki dalam kode saya untuk seseorang yang datang untuk mempertahankannya untuk mengetahui apa yang stateful dan apa yang tidak?
- Mungkin ini harus datang secara gratis jika saya memilih metafora objek yang bagus? misalnya
thingyWrapper
tidak terdengar seperti itu memiliki keadaan bebas dari bungkusnyaThingy
yang mungkin dapat berubah. Demikian pula,thingyFactory
suara seperti itu harus kekal tetapi bisa memiliki strategi berbeda yang dipilih di antara pada saat penciptaan.