แบบจำลองในโลกอุดมคติควรมีตรรกะทางธุรกิจเท่านั้นมันจำลองวัตถุจริงบางอย่างเช่นบ้าน อย่างไรก็ตามในเกือบทุกสถานการณ์โมเดลจำเป็นต้องเก็บข้อมูลไว้ในที่จัดเก็บข้อมูลบางส่วน
การโต้ตอบระหว่างตัวแบบและข้อมูลที่เก็บอาจเกิดขึ้นในชั้นข้อมูลแยกต่างหากหรือโดยตรงในตัวแบบซึ่งเป็นกรณีเมื่อใช้ ORM (Object Relational Mapper) กล่าวอีกนัยหนึ่งคือรูปแบบการเชื่อมต่อโดยตรงกับฐานข้อมูลหรือส่งผ่านข้อมูลไปยังวัตถุ "data access" อื่น ๆ ซึ่งเชื่อมต่อกับฐานข้อมูล
ORM (Mapper Object Relation Mapper) จะแมปฟิลด์ในตารางฐานข้อมูลกับแอตทริบิวต์ของวัตถุจำลองของคุณโดยให้ getters และ setters ในกรณีนี้ไม่มีชั้นข้อมูลแยกต่างหากและตัวแบบมีหน้าที่รับผิดชอบโดยตรงในการคงข้อมูลไว้
นี่คือตัวอย่างทับทิมโดยใช้ActiveRecord
ORM ยอดนิยม:
class House < ActiveRecord::Base
end
house = House.new
house.price = 120000
house.save
Price
เป็นเขตข้อมูลในhouses
ตารางที่ตรวจพบโดยอัตโนมัติโดยActiveRecord
เพิ่มตัวคั่นและตัวตั้งค่าเข้ากับวัตถุ เมื่อsave
เรียกว่าค่าของแอตทริบิวต์ราคาจะคงอยู่กับฐานข้อมูล
จากมุมมองของฉันมืออาชีพในการมีชั้นข้อมูลคือคุณได้รับจุดที่คุณสามารถจัดการข้อมูลก่อนที่จะเข้าสู่โมเดลโมเดลมีความกังวลน้อยกว่าและมีความรับผิดชอบน้อยกว่า ตัวอย่างเช่นคุณอาจจำเป็นต้องรวมข้อมูลจากหลาย ๆ แหล่งข้อมูลที่เข้ากันไม่ได้นี่เป็นสิ่งที่ ORM ไม่สามารถจัดการได้อย่างง่ายดาย
ข้อผิดพลาดหลักคืออีกระดับหนึ่งของสิ่งที่เป็นนามธรรมในการจัดการหากคุณไม่ต้องการใช้มันไม่ต้องกังวลทำให้มันง่าย ชิ้นส่วนที่เคลื่อนไหวน้อยลงและผิดพลาดน้อยลง
I'm not using the database as a simple object store
. ฉันเดาว่านั่นหมายถึงตรรกะทางธุรกิจบางอย่างในฐานข้อมูลในรูปแบบของขั้นตอนการจัดเก็บ ในทางทฤษฎีที่ขัดแย้งกับ MVC แต่ในทางปฏิบัติมันไม่สำคัญ