データベース駆動型アプリケーションでのFlyweightパターンの使用
-
10-07-2019 - |
質問
Flyweightパターンを使用する必要があるデータベース駆動型アプリケーションの状況の例を教えてもらえますか?
どうすればそれを知ることができますか、アプリケーションのある時点でフライウェイトパターンを使用する必要がありますか?
フライウェイトパターンを学びました。しかし、データベース駆動型ビジネスアプリケーションの適切な場所を理解して使用することはできません。
解決
非常に特殊化されたデータベースアプリケーションを除いて、Flyweightはアプリケーションで使用されます might 。フライウェイトは、クラスのインスタンス化が非常に多く必要な場合に使用されます。インスタンス化するたびにインスタンス化すると、パフォーマンスが低下します。代わりに、使用するデータ値を変更するだけで、必要なインスタンスごとにインスタンス化して再利用します。これは、たとえば、毎秒数千のそのようなクラスをインスタンス化する必要がある状況で役立ちます。これは一般に、データベースに永続化されたエンティティには当てはまりません。
他のヒント
具体的な問題の解決策として自然に提案されている場合は、パターンを適用する必要があります。特定のパターンを適用できるアプリケーション内の場所を探しに行かないでください。
Flyweightの目的はメモリの問題に対処することであるため、アプリケーションのプロファイルを作成し、同一のインスタンスが大量にあると判断した後にのみ適用するのが理にかなっています。
色およびベースクラスライブラリのブラシが例として思い浮かびます。 。
Flyweightの非常に重要な部分は共有実装が不変であるため、データ駆動型アプリケーションの適切な候補はドメインドリブンデザインは値オブジェクトと呼ばれますが、同じ値が多数ある場合にのみ関連します。
[DB担当者ではないので、これが最善の推測です]
フライウェイトパターンの本当のボーナスは、必要に応じてデータを再利用できることです。もう1つの例は、「文字」ごとにオブジェクトを持つ理想的なワープロです。あなたのドキュメントでは、しかし、そのウルドはあまりにも多くのメモリを消費するので、フライウェイトメモリでは、必要な一意の値の1つだけを保存できます。
それを見るための2番目の(そしておそらく最も簡単な)方法は、オブジェクトのプールのようなものです。「フィールドごと」にプールしているだけです。 「オブジェクトごと」とは対照的なレベルレベル。
実際、今考えてみると、c(++)で(比較的小さな)メモリチャンクを使用するのと同じように、ポインタ操作を行ってデータを取り出す生データを保存します。