Saat ini saya sedang memikirkan antarmuka ke kelas yang saya tulis. Kelas ini berisi gaya untuk karakter, misalnya apakah karakter itu tebal, miring, bergaris bawah, dll. Saya telah berdebat dengan diri saya sendiri selama dua hari apakah saya harus menggunakan getter / setter atau nama logis untuk metode yang mengubah nilai menjadi gaya-gaya ini. Walaupun saya cenderung lebih suka nama logis, itu berarti menulis kode yang tidak seefisien dan tidak logis. Biarkan saya memberi Anda sebuah contoh.
Aku punya kelas CharacterStyles
yang memiliki variabel anggota bold
, italic
, underline
(dan beberapa orang lain, tapi aku akan meninggalkan mereka untuk tetap sederhana). Cara termudah untuk mengizinkan bagian lain dari program untuk mengakses variabel-variabel ini, adalah dengan menulis metode pengambil / penyetel, sehingga Anda dapat melakukannya styles.setBold(true)
dan styles.setItalic(false)
.
Tapi saya tidak suka ini. Bukan hanya karena banyak orang mengatakan bahwa getter / seter menghancurkan enkapsulasi (apakah ini benar-benar seburuk itu?), Tetapi kebanyakan karena itu tidak masuk akal bagi saya. Saya berharap untuk mendesain karakter melalui satu metode, styles.format("bold", true)
atau sesuatu seperti itu, tetapi tidak melalui semua metode ini.
Namun ada satu masalah. Karena Anda tidak dapat mengakses variabel anggota objek dengan konten string dalam C ++, saya harus menulis wadah if-statement / switch besar untuk semua gaya, atau saya harus menyimpan gaya dalam array asosiatif ( peta).
Saya tidak tahu apa cara terbaik. Satu saat saya pikir saya harus menulis getter / setter, dan saat berikutnya saya condong ke arah lain. Pertanyaan saya adalah: apa yang akan Anda lakukan? Dan mengapa Anda melakukan itu?
bold
set ke true
dan variabel lain tidak terdefinisi, metode pengambil untuk variabel lain harus mengembalikan nilai gaya induk (yang disimpan di properti lain), sedangkan pengambil untuk bold
properti harus kembali true
. Ada beberapa hal lain seperti nama dan cara itu ditampilkan di antarmuka juga.