Model di dunia yang ideal hanya boleh berisi logika bisnis, ia memodelkan beberapa objek nyata seperti Rumah. Namun dalam hampir semua keadaan model perlu untuk mempertahankan data ke beberapa penyimpanan.
Interaksi antara model dan data yang disimpan dapat terjadi pada lapisan data yang terpisah atau langsung dalam model, yang merupakan kasus ketika menggunakan ORM (Object Relational Mapper). Dengan kata lain baik model terhubung langsung ke database atau meneruskan data ke beberapa objek "akses data" lain yang terhubung ke database.
ORM (Object Relation Mapper) memetakan bidang dalam tabel database ke atribut objek model Anda, menyediakan getter dan setter. Dalam hal ini tidak ada lapisan data terpisah dan model bertanggung jawab langsung untuk mempertahankan datanya.
Berikut ini adalah contoh Ruby menggunakan ActiveRecord
ORM populer:
class House < ActiveRecord::Base
end
house = House.new
house.price = 120000
house.save
Price
adalah bidang dalam houses
tabel yang secara otomatis terdeteksi dengan ActiveRecord
menambahkan pengambil dan penyetel ke objek. Kapan save
disebut nilai atribut harga tetap ke database.
Dari sudut pandang saya, pro memiliki lapisan data adalah bahwa Anda mendapatkan titik di mana Anda dapat memanipulasi data sebelum sampai ke model, model memiliki lebih sedikit khawatir tentangnya, ia memiliki lebih sedikit tanggung jawab. Misalnya Anda mungkin perlu menggabungkan data dari beberapa sumber data yang tidak kompatibel, ini adalah sesuatu yang tidak mudah ditangani ORM.
Yang utama adalah lapisan abstraksi lain untuk dikelola, jika Anda tidak membutuhkannya, jangan repot-repot, tetap sederhana. Semakin sedikit bagian yang bergerak, semakin sedikit kesalahannya.
I'm not using the database as a simple object store
. Saya menduga itu berarti beberapa logika bisnis dalam database, dalam bentuk prosedur yang tersimpan. Secara teori itu bertentangan dengan MVC, tetapi dalam praktiknya itu tidak masalah.