Bisakah saya menggunakan mvc tanpa getter dan setter?

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?


person blockhead    schedule 26.07.2009    source sumber


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.

person chaos    schedule 26.07.2009
comment
Pertanyaannya bukan tentang menyelamatkan pekerjaan. Dalam segala hal ada pengorbanannya. Saya yakin akan selalu ada trade-off antara kerangka RAD dan sistem yang dirancang dengan baik. Kerangka kerja RAD tidak akan pernah menghasilkan kode yang dapat dipelihara dengan baik, namun dapat menyelesaikan pekerjaan dengan cepat. Saya hanya mencoba menyelesaikan masalah dengan cara yang murni, dengan berusaha sebisa mungkin berpegang pada prinsip OO, karena saya yakin itulah cara terbaik untuk membuat sistem yang dapat dipelihara. - person blockhead; 26.07.2009
comment
Alasan membuat sesuatu menjadi sistem yang dapat dipelihara adalah untuk menghemat pekerjaan dalam pemeliharaan. Jika Anda membiarkan kemurnian menjauh dari motivasinya dalam menyelamatkan pekerjaan, Anda akan mendapatkan sistem yang sangat murni dan sangat buruk untuk digunakan. Itu terjadi setiap saat. - person chaos; 26.07.2009

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.

person Daniel C. Sobral    schedule 26.07.2009
comment
Sejauh poin terakhir, antarmuka akan menangani cara renderingnya. Objek tidak akan mengetahui lebih dari sekedar pemberian sebagian statusnya kepada penyaji, namun tidak mengetahui apa yang dilakukan penyaji terhadap objek tersebut. Pertanyaan sebenarnya adalah, apakah itu dianggap terlalu banyak penggandengan (mungkin objeknya bahkan tidak tahu bahwa itu perlu dirender), atau apakah saya hanya gila. - person blockhead; 26.07.2009