Ini pertanyaan pada SO berbicara tentang mengoreksi apa pemikiran OP adalah fitur iri kode. Contoh lain di mana saya melihat ungkapan yang bagus ini dikutip dalam jawaban yang baru - baru ini diberikan di sini di programer.SE. Meskipun saya memberikan komentar untuk jawaban itu meminta informasi, saya pikir itu akan sangat membantu bagi programmer mengikuti T&J untuk memahami apa yang dimaksud dengan iri fitur . Silakan mengedit tag tambahan jika menurut Anda tepat.
refactoring
code-reviews
clean-code
code-smell
Kutu buku
sumber
sumber
Jawaban:
Cemburu fitur adalah istilah yang digunakan untuk menggambarkan situasi di mana satu objek mendapat bidang bidang lain untuk melakukan semacam perhitungan atau membuat keputusan, daripada meminta objek untuk melakukan perhitungan itu sendiri.
Sebagai contoh sepele, pertimbangkan kelas yang mewakili persegi panjang. Pengguna persegi panjang mungkin perlu tahu wilayahnya. Pemrogram dapat mengekspos
width
danheight
bidang dan kemudian melakukan perhitungan di luarRectangle
kelas. Atau,Rectangle
bisa menjagawidth
danheight
bidang pribadi dan menyediakangetArea
metode. Ini bisa dibilang pendekatan yang lebih baik.Masalah dengan situasi pertama, dan alasan itu dianggap sebagai bau kode, adalah karena itu merusak enkapsulasi.
Sebagai aturan praktis, setiap kali Anda menggunakan bidang yang luas dari kelas lain untuk melakukan segala jenis logika atau perhitungan, pertimbangkan untuk memindahkan logika itu ke metode di kelas itu sendiri.
sumber
Ada situasi yang memungkinkan ketika OK untuk menggunakan metode kelas / struct lain secara luas - ketika kelas / struct Anda adalah wadah untuk data. Biasanya ada sedikit yang bisa Anda lakukan dengan data ini tanpa konteks eksternal.
Kelas-kelas semacam itu masih dapat menyimpan beberapa logika internal tetapi lebih sering mereka digunakan sebagai wadah:
@jhewlett dalam jawabannya merujuk pada artikel ini untuk membuktikan bahwa Anda tidak boleh menggunakan anggota kelas lain secara ekstensif, tetapi ada situasi lain yang berbau kode yang dijelaskan di sana bersama para pendukung contoh saya:
sumber