Yang ini telah menghantuiku begitu lama. Ketika melakukan pemrograman MVC menurut Anda apa praktik pemrograman yang lebih baik? Haruskah seseorang menggunakan model yang terisi penuh atau yang terisi sebagian, terutama ketika saya tahu bahwa untuk tugas khusus ini saya hanya akan membutuhkan 2 bidang dari objek model yang memiliki 5 lainnya?
Kadang-kadang sepertinya kriminal untuk mengisi daftar 20 objek model dengan semua nilai dari basis data ketika Anda tahu bahwa Anda hanya perlu sedikit dari mereka.
Tentu saja model parsial berarti bahwa Anda harus menulis satu metode lagi di DAO Anda selain dari yang mengambil semuanya. Yang berarti lebih banyak kode untuk dipelihara?
Di sisi lain menarik segala sesuatu dari DB dengan model yang penuh berarti satu metode melayani semua tetapi ini jelas akan memberi Anda beberapa overhead kinerja.
Saya dapat melihat ORM (seperti Hibernate atau ActiveRecord of Rails) mendukung tren dalam pemrograman MVC dan basis data seperti model penuh Google BigTable adalah tren yang diterima. Tetapi bagaimana jika Anda masih menggunakan JDBC tua yang baik?
Perangkat keras itu murah, pengembangannya mahal. Apakah itu benar bahkan ketika aplikasi perlu menskalakan hingga beberapa ratus ribu permintaan per jam?
Jawaban:
Anda memiliki dua opsi:
1) Biarkan beberapa bidang dalam model tidak terisi
2) Buat model "lite" tambahan untuk situasi spesifik Anda
Yang mana yang akan dipilih tergantung pada dua hal lagi:
a) Berapa banyak bidang dari model "penuh" yang akan diabaikan
b) Seberapa sering model "lite" ini akan dipakai
Jika hanya ada beberapa atau beberapa bidang yang dapat diisi, tidak apa-apa untuk pergi dengan 1).
Jika b) hanya situasi individu yang luar biasa, mungkin tidak ada gunanya membuat model tambahan hanya untuk satu kasus penggunaan.
Pendekatan lain adalah mendefinisikan model "lite" dan mewarisi model "penuh" darinya.
sumber
Jika tampilan Anda hanya membutuhkan 2 properti dari model, maka Anda (mungkin) memiliki model yang salah untuk use case itu! Saya akan mencari untuk membuat model yang sesuai dengan tampilan, menyimpan pencarian DB ekstra dan hanya mengisi data yang Anda butuhkan. Jika tampilan selanjutnya membutuhkan lebih detail maka Anda harus bertanya, apakah saya mendapatkan data tambahan nanti atau haruskah saya mendapatkan semuanya di muka ...
Sebagai alternatif, Anda bisa melihat semacam evaluasi malas, sehingga nilai-nilai diisi ketika Anda membutuhkannya. Ini bisa bekerja dengan baik tetapi jelas lebih banyak pekerjaan dan mungkin berakhir menyebabkan beberapa perjalanan pulang pergi ke DB yang tidak bagus jika Anda akhirnya sering melakukannya.
Yang mengatakan, jika Anda pada dasarnya memilih beberapa bidang tambahan dari tabel atau tampilan maka biaya untuk mendapatkan data tambahan adalah, untuk semua maksud dan tujuan nol (OK, ada lebih banyak byte pada kabel, tetapi biaya terbesar kemungkinan besar untuk membuat dan menghancurkan koneksi), jadi jika ada kesempatan Anda akan membutuhkan beberapa data tambahan saya mungkin akan mengisi model sepenuhnya setelah Anda senang Anda memiliki model yang tepat .
Perangkat keras itu murah, tetapi tidak ada jumlah perangkat keras yang dapat membuat desain yang buruk bekerja dengan baik.
sumber
Model ini bukan DAO.
Dan satu hal lagi: jika Anda mengatakan bahwa Anda memiliki 20 model (pelanggan, dari contoh Anda), maka itu bukan model MVC. Model domain tidak memetakan langsung ke satu baris tabel. Sebaliknya itu harus bertanggung jawab atas semua operasi yang dilakukan dengan "pelanggan" Anda.
Dalam contoh Anda, "Pelanggan" bukan model domain, tetapi hanya objek di dalam model.
Adapun interaksi dengan database, tanggung jawab itu harus didelegasikan ke objek data mapper , yang harus tahu cara menyimpan dan mengambil contoh kelas Pelanggan Anda.
sumber