テーブルモジュールとドメインモデル
-
10-07-2019 - |
質問
ユーザープロファイルを保存する方法の選択について質問しました先日、 David Thomas Garciaからの興味深い応答を提案しましたテーブルモジュールデザインパターンを使用します。これはおそらく私がしたい方向のようです。私がGoogleで見つけたものはすべて、かなり高いレベルの議論のようです。だから誰かが私にいくつかの例の方向性を教えてくれたり、すばらしいと思われるナットやボルトのより良いアイデアを教えてくれたりします。
解決
最良のリファレンスは、「エンタープライズアプリケーションアーキテクチャのパターン」です。マーティン・ファウラー:
表モジュールのセクションからの抜粋です:
A テーブルモジュールはドメインを整理します のテーブルごとに1つのクラスを持つロジック データベース、およびの単一インスタンス クラスにはさまざまな手順が含まれています それはデータに作用します。の Domainとの主要な区別 モデルは、多くの 注文、ドメインモデルには 注文ごとの注文オブジェクトテーブル モジュールには、処理するオブジェクトが1つあります すべての注文。
テーブルモジュールは、ユーザープロファイルデータについて説明した柔軟なデータベースアーキテクチャ、特に Entity-Attribute-Value デザイン。
通常、ドメインモデルを使用する場合、基になるテーブルの各行は1つのオブジェクトインスタンスになります。ユーザープロファイル情報を複数の行に格納しているため、多くのドメインモデルオブジェクトを作成する必要がありますが、実際に必要なのは、すべてのユーザープロパティをカプセル化する1つのオブジェクトです。
代わりに、テーブルモジュールを使用すると、基になるデータベーステーブルの複数の行に適用されるロジックを簡単にコーディングできます。特定のユーザーのプロファイルを作成する場合、それらのすべてのプロパティを指定します。テーブルモジュールクラスには、プロパティごとに1行の一連の INSERT
ステートメントに変換するコードが含まれます。
$table->setUserProfile( $userid, array('firstname'=>'Kevin', 'lastname'=>'Loney') );
同様に、特定のユーザーのプロファイルをクエリするには、テーブルモジュールを使用して、クエリ結果セットの複数の行をオブジェクトメンバーにマッピングします。
$hashArray = $table->getUserProfile( $userid );