理想的な世界のモデルには、ビジネスロジックのみを含める必要があり、家などの実際のオブジェクトをモデル化します。ただし、ほぼすべての状況で、モデルはデータを何らかのストレージに保持する必要があります。
モデルと保存されたデータとの相互作用は、別のデータレイヤーで発生するか、モデル内で直接発生します。これは、ORM(Object Relational Mapper)を使用する場合です。言い換えると、モデルはデータベースに直接接続するか、データベースに接続する他の「データアクセス」オブジェクトにデータを渡します。
ORM(オブジェクトリレーションマッパー)は、データベーステーブルのフィールドをモデルオブジェクトの属性にマップし、ゲッターとセッターを提供します。この場合、独立したデータレイヤーはなく、モデルはそのデータの永続化に直接責任を負います。
以下は、ActiveRecord
人気のあるORM を使用したRubyの例です。
class House < ActiveRecord::Base
end
house = House.new
house.price = 120000
house.save
Price
オブジェクトにゲッターとセッターを追加するhouses
自動検出されるテーブル内のフィールドActiveRecord
です。いつsave
に呼び出され、価格属性の値は、データベースに永続化されます。
私の観点から見ると、データ層を持つことの長所は、モデルに到達する前にデータを操作できるポイントを得ることです。モデルは心配が少なく、責任が少なくなります。たとえば、互換性のない複数のデータソースからのデータを結合する必要がある場合、これはORMで簡単に処理できないものです。
主な短所は、管理するもう1つの抽象化層であり、不要な場合は気にせず、シンプルに保ちます。可動部品が少なく、誤作動が少ない。
I'm not using the database as a simple object store
。それは、ストアドプロシージャの形式で、データベース内のいくつかのビジネスロジックを意味すると推測しています。理論的にはMVCに反しますが、実際には問題ではありません。