Mô hình trong một thế giới lý tưởng chỉ nên chứa logic kinh doanh, nó mô hình một số đối tượng thực như Nhà. Tuy nhiên, trong hầu hết các trường hợp, mô hình cần duy trì dữ liệu của nó để lưu trữ.
Tương tác giữa mô hình và dữ liệu được lưu trữ có thể xảy ra trên một lớp dữ liệu riêng biệt hoặc trực tiếp trong mô hình, đó là trường hợp khi sử dụng ORM (Object Relative Mapper). Nói cách khác, mô hình kết nối trực tiếp với cơ sở dữ liệu hoặc mô hình truyền dữ liệu của nó tới một đối tượng "truy cập dữ liệu" khác kết nối với cơ sở dữ liệu.
Một ORM (Object Relation Mapper) ánh xạ các trường trong bảng cơ sở dữ liệu tới các thuộc tính của đối tượng mô hình của bạn, cung cấp getters và setters. Trong trường hợp này không có lớp dữ liệu riêng biệt và mô hình chịu trách nhiệm trực tiếp cho việc lưu giữ dữ liệu của nó.
Dưới đây là một ví dụ về Ruby sử dụng ActiveRecord
ORM phổ biến:
class House < ActiveRecord::Base
end
house = House.new
house.price = 120000
house.save
Price
là một trường trong houses
bảng được tự động phát hiện bằng cách ActiveRecord
thêm getter và setter vào đối tượng. Khi save
được gọi là giá trị của thuộc tính price được duy trì cho cơ sở dữ liệu.
Theo quan điểm của tôi, chuyên gia có một lớp dữ liệu là bạn có một điểm trong đó bạn có thể thao tác dữ liệu trước khi đưa vào mô hình, mô hình có ít lo lắng hơn, nó có ít trách nhiệm hơn. Ví dụ: bạn có thể cần kết hợp dữ liệu từ một số nguồn dữ liệu không tương thích, đây là điều mà ORM không thể dễ dàng xử lý.
Con chính là một lớp trừu tượng khác để quản lý, nếu bạn không cần nó, đừng bận tâm, hãy giữ nó đơn giản. Ít di chuyển các bộ phận, ít đi sai.
I'm not using the database as a simple object store
. Tôi đoán điều đó có nghĩa là một số logic kinh doanh trong cơ sở dữ liệu, dưới dạng các thủ tục được lưu trữ. Về lý thuyết đi ngược lại với MVC, nhưng trong thực tế, nó không thành vấn đề.