「Active Record」は、
ソフトウェアアーキテクチャパターン
を指すという用語でもあります。RailsのActive Recordは、「Active Record」パターン
の実装でもあり、オブジェクトリレーショナルマッピングシステム
とも呼ばれます。以下のセクションでは、これらの用語について説明します。
Active Recordパターンとはデータベースのレコードとオブジェクトを対応付けるもの
パターン名としてのActive Recordは、Martin Fowler『Patterns of Enterprise Application Architecture』という書籍で
「データベーステーブル内の行をラップし、データベースアクセスをカプセル化し、そのデータにドメインロジックを追加するオブジェクト」
と説明されています。Active Recordオブジェクトはデータと振る舞いの両方を保持
します。Active Recordクラスは、背後のデータベースのレコード構造と非常に密接に対応
します。これにより、以下の例でわかるように、ユーザーはデータベースの読み取りや書き込みを手軽に行える
ようになります。
ドメインモデルは単にドメインの概念を抽出しただけのもの
で、ほとんどの場合、ドメインモデルの状態をデータとして保存する必要があります。Railsでは、データストアにリレーショナルデータベース(以降、特に必要ない限り単の「データベース」と言います)を用いることを想定しています。そして、アクティブレコードと呼ばれるアーキテクチャパターンを用いて、データベースのレコードとオブジェクトを対応付けています
。そのため、モデルの実装で利用するライブラリの名前がActiveRecordなのです
パターン名とは
これは調べても良い記事を見つけることができなかった。
ラップ
(…に)包む、くるむ、(…に)おおい包む、おおい隠す、まとう、かける、巻く、(…に)夢中にさせる、終える、書き上げる
カプセル化
データ(属性)とそれを操作する手続き(メソッド)を一体化して、オブジェクトの実装の詳細をオブジェクトの内部に隠蔽(情報隠蔽)することをカプセル化といいます。カプセル化により、オブジェクトの内部の内部データ構造やメソッドの実装を変更しても、他のオブジェクトがその影響を受けにくくなるので、独立性が高まり、再利用がしやすくなります。
オブジェクト指向におけるオブジェクト
単なるデータそのものではなく、データ(属性)とそのデータに対する手続き(メソッド)を一つにまとめたものを指す。
ドメインロジックとは定義されたオブジェクトの振る舞い
質の高いアプリケーションを開発するには、対象の問題領域を構成する概念を抽出し、これらをもとに実装を進めていくことが重要です。この時、
アプリけーションが対象とする問題領域のことをドメイン
と呼びます。また、ドメインを分析して構成概念を抽出することをモデリングと呼び、その結果得られた概念のことをドメインモデル
と呼びます。
ドメインモデルは、その概念に関連する属性と振る舞いを持ったオブジェクト
として定義されます。この振る舞いのことをドメインロジック、または、ビジネスロジック
と呼びます。 れいるずのモデルは、ドメインモデルとドメインロジックを実装するレイヤーになります。
ドメインモデルは単にドメインの概念を抽出しただけのもので、ほとんどの場合、ドメインモデルの状態をデータとして保存する必要があります。Railsでは、データストアにリレーショナルデータベース(以降、特に必要ない限り単の「データベース」と言います)を用いることを想定しています。そして、アクティブレコードと呼ばれるアーキテクチャパターンを用いて、データベースのレコードとオブジェクトを対応付けています
。そのため、モデルの実装で利用するライブラリの名前がActiveRecordなのです
オブジェクト/リレーショナルマッピング(ORM)とはプログラミング言語のオブジェクトでRDBMSのテーブルに接続する
オブジェクト/リレーショナルマッピング(一般にORMと呼ばれます)は、
プログラミング言語のリッチなオブジェクトをリレーショナルデータベース管理システム(RDBMS)のテーブルに接続する技術
です。Railsアプリケーションの場合、これらはRubyオブジェクト
です。ORMによって、SQLステートメントを直接記述せずに、Rubyオブジェクトの属性やオブジェクト間の関係をデータベースに手軽に保存したり、データベースから取得
したりできます。ORMによって、作成する必要があるデータベースアクセスコードの量は一般に最小限で済むようになります。
ORMフレームワークとしてのActive Record
Active Recordでは、Rubyオブジェクトを用いて以下を行えます。
- モデルおよびモデル内のデータを表現する
- モデル同士の関連付け(association: アソシエーション)を表現する
- 関連付けられているモデル間の継承階層を表現する
- データをデータベースで永続化する前にバリデーション(検証)を行なう
- データベースをオブジェクト指向スタイルで操作する
感想
- Active Recordパターンとはデータベースのレコードとオブジェクトを対応付けるもの
Active Recordを完全に理解するには、リレーショナルデータベース管理システム(RDBMS)やSQL(構造化クエリ言語)についての知識が役に立ちます。これらについてもっと深く学びたい場合は、このSQLチュートリアル(このRDBMSチュートリアルも可)を参照するか、他の方法で学習しましょう。
- ORMとはプログラミング言語のオブジェクトでRDBMSのテーブルに接続する
- 完全に理解するにはsQLやRDBMSのことを理解しなければならない。