Latar Belakang
Saya sedang membaca "buku Kode Bersih", dan, secara paralel, saya sedang mengerjakan objek senam Kata seperti rekening bankir, dan saya terjebak pada aturan itu:
Aturan 9 dari objek senam adalah kita tidak menggunakan pengambil atau setter.
Tampaknya cukup menyenangkan, dan saya setuju dengan prinsip ini. Terlebih lagi, pada halaman 98-99 dari Clean Code, penulis menjelaskan bahwa pengambil / pemecah gelombang memutuskan abstraksi, dan bahwa kita tidak harus menanyakan objek kita, tetapi kita harus memberi tahu objek kita.
Ini masuk akal dalam pikiran saya, dan saya sepenuhnya setuju dengan prinsip ini. Masalahnya muncul dalam praktik.
Konteks
Sebagai contoh, saya memiliki aplikasi di mana saya harus mendaftar beberapa pengguna, dan untuk menampilkan detail pengguna.
Pengguna saya terdiri dari:
-> Name
--> Firstname --> String
--> Lastname --> String
-> PostalAddress
--> Street --> String
--> PostalCode --> String
Masalah
Bagaimana saya bisa melakukan, atau apa yang bisa saya lakukan untuk menghindari getter ketika saya hanya perlu menampilkan informasi sederhana ( dan saya harus mengonfirmasi bahwa saya tidak perlu operasi tambahan pada bidang tertentu ) untuk menampilkan nilai Firstname dengan sederhana ( acak) dukungan keluaran?
Apa yang muncul di pikiran saya
Salah satu solusinya adalah membuat:
user.getName().getFirstName().getStringValue()
Yang benar-benar mengerikan, melanggar banyak aturan benda-benda senam, dan melanggar Hukum Demeter.
Yang lain akan menjadi sesuatu seperti:
String firstName = user.provideFirstnameForOutput();
// That would have called in the user object =>
String firstName = name.provideFirstnameForOutput();
// That would have called in the name object =>
String firstName = firstname.provideFirstnameForOutput();
Tapi saya tidak merasa nyaman dengan solusi ini, yang sepertinya hanya menjadi "pengakses pesanan tingkat tinggi" seperti memintas pembuat / penyetel standar dengan metode yang hanya bertujuan untuk menyesuaikan dengan hukum Demeter ...
Ada ide ?