Jika saya tidak ingin mengekspos keadaan objek saya, tetapi saya masih perlu menampilkannya (misalnya dalam HTML, XML atau JSON), bagaimana cara saya melakukan itu di lingkungan MVC. Apakah masuk akal untuk memiliki metode ekspor yang mengekspor objek yang tidak dapat diubah ("kelas data" jika Anda mau). Bagaimana dengan menambahkan metode render yang berhubungan dengan antarmuka? Apakah ada pendekatan lain untuk masalah ini?
Bisakah saya menggunakan mvc tanpa getter dan setter?
Jawaban (2)
Metode render paling mendekati keadaan tidak terbuka. Metode lain (yang dikenal oleh pengguna Smarty) adalah dengan memberi makan struktur data non-objek yang akan digunakan.
Namun patut ditanyakan, apa masalah yang dipecahkan oleh abstraksi dan/atau antarmuka yang mereka sembunyikan ini? Jika Anda akan melakukan semua pekerjaan ini, IMO Anda harus memastikan ada beberapa pekerjaan yang dapat menyelamatkan Anda.
Inti dari enkapsulasi adalah menyembunyikan implementasi. Ada "keadaan" yang perlu diketahui oleh objek lain -- terkadang seluruh tujuan suatu objek memberitahukan keadaan tersebut.
Misalnya, akan sangat sia-sia jika objek Defined Finite Automata tidak memiliki pengambil apakah objek tersebut berada pada kondisi akhir atau tidak. Namun tentu berguna untuk merangkum bagaimana informasi tersebut disimpan secara internal.
Sekarang, tujuan dari getter dan setter adalah untuk menyediakan antarmuka ke properti keadaan suatu objek, yang mungkin tidak ada hubungannya dengan bagaimana objek tersebut diimplementasikan. Memang benar, sebagian besar properti ini adalah bidang dalam objek, dan pengambil dan penyetel hanyalah cangkang dangkal. Di sisi lain, Anda memiliki kebebasan untuk mengubah implementasi internal, karena pengambil dan penyetel akan memastikan kompatibilitas antarmuka.
Namun, jika properti ini terlalu terkait dengan implementasi sebenarnya dan tidak terlalu berkaitan dengan objeknya, maka Anda harus mempertimbangkan untuk menghapus pengambil dan penyetel tersebut.
Karena itu, jika Anda perlu menampilkan sesuatu kepada pengguna, maka ini adalah properti yang perlu diketahui oleh objek lain. Suatu objek tidak boleh memikirkan cara menampilkan dirinya sendiri, karena berbagai alasan. Salah satunya adalah ia tidak dapat mengetahui cara merendernya tanpa mengetahui cara penggunaannya oleh aplikasi, yang akan membuat TI mengetahui terlalu banyak tentang objek lainnya.