0

2 つの部分からなる質問:

番号 1 : 参照されるオブジェクトのプロパティ/属性の一部が必ずしも必要ではない場合、別のオブジェクトを参照するオブジェクトのモデルを作成するための最良のアプローチは何ですか?

PERSONBUSINESSの 2 つのオブジェクトがあるとします。

Person
+ PersonID
+ Name
+ Age
+ Sex
+ Skill
+ Business *

Business
+ BusinessID
+ Name
+ Address
+ CorporateVision (this is large)

上記の例: PERSONは、現在の雇用主としてBUSINESSへの参照を持っています。

データベースには、オブジェクトごとに 2 つのテーブルがあります。コードでは、MVC アーキテクチャ パターンを使用して、オブジェクトごとに 2 つのクラスを作成します。データベースにはBUSINESS --> PERSONの間に外部キー関係がありますが、コードではPERSONオブジェクトにはBUSINESSオブジェクトへの参照を保持するメンバー変数があります。

ここで、 PERSONSのコレクションを列挙し、特定の会社 ( BUSINESS . Nameに基づく) で働く人の総数を調べたいとしましょう。

MVC を使用しなくても、データベースにクエリを実行してカウントを取得する関数を作成できました。シンプルで効率的。

WITH MVC では、すべてのPERSONオブジェクトをインスタンス化する必要があります。これにより、参照用のBUSINESSオブジェクトがインスタンス化されます (まだ作成されていない場合は、BusinessFactoryが最初にコレクションをチェックします)。さらに、BUSINESSをプルする必要があります。すべてのオブジェクトのデータベースからのCorporateVision 。また、これらのビジネスのほとんどがメディア マーケティング企業であるため、企業のビジョンのほとんどは大きなテキストの塊です。そのため、企業名だけが必要な場合、データベースから CorporateVision を読み取る必要はほとんどありません。

コード内のPERSONオブジェクトを次のように変更することで、この問題を解決できました。

Person
+ PersonID
+ Name
+ Age
+ Sex
+ Skill
+ BusinessID
+ BusinessName

そのため、 PERSONオブジェクトを作成するときに、 BUSINESSでJOIN を実行し、名前をキャッシュします。これで、BusinessName を迅速かつ効率的に取得できます...さらに、必要に応じて、ID を検索することで完全なBUSINESSオブジェクトを取得できます。しかし、私はモデルを非正規化しただけです...そして、新しい問題を導入しました...そして新しい質問。

番号 2 : MVC はマルチユーザー データベースで同時実行をどのように処理しますか?

クライアント アプリケーションが (特定のビジネスで働くすべての人を検索する上記の列挙を使用して) 列挙しているときに、別のユーザーが 2 つのBUSINESSオブジェクトをマージしたとします。

BusinessName キャッシュがすべて古いため、メモリ内コレクションが正しくありません。PERSONを離れたばかりの場合も同じことが言えます。BUSINESSオブジェクト参照としてのビジネス: BUSINESSオブジェクトは古くなります。

要約すると、MVC を使用すると、アプリケーションの ACID 性が失われるだけでなく、データ取得の効率も失われると思います。または、MVC を間違って使用していますか?

4

1 に答える 1