2009-03-06 4 views
1

カスタム(通常は揮発性の)データをエンティティモデルクラスに導入するベストプラクティスは何ですか?これはまず悪い習慣のように聞こえるかもしれませんが、それはかなり一般的なシナリオのようです。最近のWebアプリケーションでは、適切なモデルを開発しました。ほとんどの場合、モデルエンティティの読み込みで問題はありません。しかし、エンティティの階層全体をロードする余裕がない場合があります。いくつかのSQL COUNTの結果、あるいはおそらくいくつかの追加情報をモデルエンティティの横に(または埋め込まれて)ロードする必要があります。基本的に、要件と条件は次のとおりです。「純粋な」モデルオブジェクトを使用して消費者定義の集計(SQL数など)をまとめる?

  1. すべての操作の99.9999999999%が読み取り操作であるWebアプリケーションです。

  2. 複雑なビジネスロジックを処理する必要はありません。 HTMLにすばやくデータを取得するだけです。

  3. いくつかのパフォーマンスが重大なケースでは、モデルのプロパティに適合しないSQL集計の結果をロードする必要があります。

  4. 必要に応じて新しいカスタムデータを導入するための拡張可能な方法が必要です。

通常、ORM(dbの生データなど)をあまり使わないとこの問題を解決しますか?私はこれが何度も議論されていると確信していますが、私は有用なものを見つけるための良いGoogleクエリを理解することはできません。

編集::私は後で問題があまりうまく形成されなかったことを認識してから、私はそれを再調整し、new oneを開始することにしました。

答えて

2

ブラウザとの間で動作がほとんどまたはまったく無関係に関係データを取得している場合は、OOパラダイムの関係上の問題を解決しようとしているように思えます。

私は、オブジェクト指向のアプローチを完全に排除する傾向があります。

私のチームは最近、「おそらく最も簡単なことは何か?」と尋ねてアプリケーションを書き直しました。 "問題に最も近い言語は何ですか?" OOを置き換えた新しいアプリは、10倍小さく、速く、安くなりました。

私たちは、SQL、ストアドプロシージャ、DBサーバー上のXMLライブラリ、XSLT(HTMLを取得するため)、およびJavaScriptを使用しました。

0

自分自身のようなOOPの純粋主義者は、デコレータパターンに行くでしょう。 http://en.wikipedia.org/wiki/Decorator_pattern

しかし、問題は、それが提供する柔軟性が必要ないことです。さらに、別個の操作ごとに新しいクラスを作成することは過度に思えるかもしれませんが、良いコンパイル・タイプ・チェックを提供します。

0

私の見解では、アプリケーションがDomain Modelパターンを使用してデータを消費することが最善の方法です。ドメインモデルは、アプリケーションのニーズに合った適切なタイプのクエリを実行するためのビジネスロジック方法を提供します。

これらは、データベースの行に直接マッピングされる「ライブ」結果を取得し、編集して「保存」することができます。

さらに、ドメインモデルは、複雑すぎてデータベースに簡単に戻すことができない読み取り専用の結果をフェッチするメソッドを提供できます。これには、グループ化された集計クエリ結果の例が含まれ、結合されたクエリ結果セット、式は列などとなります。

ドメインモデルパターンは、物理データベースの設計からアプリケーションのOO設計を切り離す方法を提供します。

関連する問題