Baru-baru ini selama tinjauan kode saya menemukan kode, ditulis oleh seorang rekan baru, yang berisi pola dengan bau. Saya menduga bahwa keputusan kolega saya didasarkan pada aturan yang diusulkan oleh buku Kode Bersih yang terkenal (dan mungkin juga oleh buku-buku serupa lainnya).
Ini adalah pemahaman saya bahwa konstruktor kelas sepenuhnya bertanggung jawab atas pembuatan objek yang valid dan bahwa tugas utamanya adalah penugasan properti (pribadi) objek. Tentu saja dapat terjadi bahwa nilai properti opsional dapat ditetapkan dengan metode selain konstruktor kelas, tetapi situasi seperti itu agak jarang terjadi (walaupun tidak selalu salah, asalkan seluruh kelas mempertimbangkan sifat opsional properti tersebut). Ini penting, karena memungkinkan untuk memastikan bahwa objek selalu dalam keadaan valid.
Namun, dalam kode yang saya temui, sebagian besar nilai properti sebenarnya ditentukan oleh metode lain selain konstruktor. Nilai yang dihasilkan dari perhitungan ditugaskan ke properti yang akan digunakan dalam beberapa metode pribadi di seluruh kelas. Penulis tampaknya menggunakan properti kelas seolah-olah mereka adalah variabel global yang harus dapat diakses di seluruh kelas, alih-alih parameterisasi nilai-nilai ini ke fungsi yang membutuhkannya. Selain itu, metode kelas harus dipanggil dalam urutan tertentu, karena kelas tidak akan berbuat banyak sebaliknya.
Saya menduga bahwa kode ini telah terinspirasi oleh saran untuk menjaga metode tetap pendek (<= 5 baris kode), untuk menghindari daftar parameter besar (<3 parameter) dan bahwa konstruktor tidak boleh melakukan pekerjaan (seperti melakukan perhitungan semacam yang penting untuk validitas objek).
Sekarang tentu saja saya bisa membuat kasus terhadap pola ini jika saya bisa membuktikan bahwa semua jenis kesalahan yang tidak terdefinisi berpotensi muncul ketika metode tidak dipanggil dalam urutan tertentu. Namun, saya memperkirakan bahwa respons terhadap hal ini adalah menambahkan validasi yang memverifikasi bahwa properti harus disetel begitu metode dipanggil yang membutuhkan properti tersebut diatur.
Namun saya lebih suka mengusulkan untuk sepenuhnya mengubah kode, sehingga kelas menjadi cetak biru menjadi objek aktual, daripada serangkaian metode yang harus dipanggil (secara prosedural) dalam urutan tertentu.
Saya merasa bahwa kode yang saya temukan berbau. Bahkan, saya percaya ada perbedaan yang agak jelas tentang kapan harus menyimpan nilai di properti kelas dan kapan memasukkannya ke dalam parameter untuk metode yang berbeda untuk digunakan - Saya tidak benar-benar percaya mereka bisa menjadi alternatif satu sama lain . Saya mencari kata-kata untuk perbedaan ini.