İdeal bir dünyadaki model sadece iş mantığını içermeli, bir Ev gibi gerçek bir nesneyi modeller. Bununla birlikte, hemen hemen her koşulda, modelin verilerini bir miktar depolama alanında saklaması gerekir.
Model ve saklanan veriler arasındaki etkileşimler, ayrı bir veri katmanında veya doğrudan modelde gerçekleşebilir; bu, bir ORM (Nesne İlişkisel Eşleyici) kullanıldığında geçerlidir. Başka bir deyişle, ya model doğrudan veritabanına bağlanır ya da verilerini veritabanına bağlanan başka bir "veri erişimi" nesnesine iletir.
Bir ORM (Nesne İlişkisi Eşleyicisi), veritabanı tablosundaki alanları model nesnenizin nitelikleriyle eşler ve alıcıları ve ayarlayıcıları sağlar. Bu durumda ayrı bir veri katmanı yoktur ve model, verilerinin devamlılığını sağlamaktan doğrudan sorumludur.
İşte ActiveRecord
popüler bir ORM kullanan bir Ruby örneği :
class House < ActiveRecord::Base
end
house = House.new
house.price = 120000
house.save
Price
houses
tabloda otomatik olarak algılanan ActiveRecord
ve nesneye alıcı ve ayarlayıcı ekleyen bir alandır . Ne zaman save
çağrılır fiyat özniteliğinin değeri veritabanında kalıcı.
Benim bakış açımdan bir veri katmanına sahip olmanın avantajı, modele gelmeden önce verileri manipüle edebileceğiniz bir noktaya sahip olmanız, modelin daha az endişe duyması, daha az sorumlulukları olması. Örneğin, uyumlu olmayan birkaç veri kaynağından veri birleştirmeniz gerekebilir, bu bir ORM'nin kolayca işleyemeyeceği bir şeydir.
Ana con, yönetmek için başka bir soyutlama katmanıdır, eğer ihtiyacınız yoksa, rahatsız etmeyin, basit tutun. Daha az hareketli parça, yanlış gitmek için daha az.
I'm not using the database as a simple object store
. Ben veritabanında saklı yordamlar şeklinde bazı iş mantığı anlamına tahmin ediyorum. Teorik olarak MVC'ye karşı giden, ancak pratikte önemli değil.