6

VMCを使用してサイトを作成し、Beanを使用してモデルからコントローラー/ビューにデータを転送しています。

Beanを変更していない場合は単純な構造体に格納する、基本的で非常に単純なキャッシングを実装する予定です(使用量が増えるにつれて、バージョン1.3以降のより優れたキャッシングシステムを実装します)。

したがって、問題はBeanに何が含まれるかということです。

1つのタイプのBeanは基本データのみを保持し、残りの作業を外部サービスに依存します(DAOに連絡してクエリを取得し、クエリを解析してBean値をロードします)。これは、同僚から繰り返し言われている「貧血の豆」モデルです:-)。

別のタイプのBeanは、より自己完結型です。DAOがどこにあるかを知っているので、DAOを直接呼び出してデータクエリを取得します。クエリを解析してプロパティを設定するために必要な関数が含まれます。基本的に、「サービス」レイヤーの多くをBeanと組み合わせて、直接データベースをDAOレイヤーに残します。

もちろん、コントローラー/ビューにとって、両方のBeanは同じように見え、同じように動作します。

しかし、問題はメモリと、ColdFusion/Javaがそれをどのように処理するかです。

貧血モデルを使用すると、Beanには、必要なときにサービスをポイントできるようにするために、もう少しタッチするだけでプロパティ変数を保持するのに十分なメモリがあります。

2番目のタイプのBeanの関数が重いと、キャッシュ内でより多くのメモリを消費しますか?Beanの各コピーには、メソッドの完全なコピーがありますか?

2番目のモデルは、メソッドを「共有」し、プロパティ変数用のメモリのみを必要とするため、メモリはそれほど多くないと思う傾向があります。

2番目の方法であるIMHOは、コードベースを単純化します。これは、Beanが必要とするコードが、DAOとサービスの間に散在するのではなく、Beanに近いためです。また、BeanのDAOへの呼び出しを渡すだけで、必要なときにDAOに直接アクセスできるサービスの単純な関数が減ります...

質問は意味がありますか?または、少なくとも私はそれをどのように求めていますか?

4

2 に答える 2

4

すべてのメモリ管理は Java レベルで処理されるため、同じ規則に従います。Java では、オブジェクト インスタンスの作成時に割り当てられる唯一の「新しい」メモリは、そのメンバー変数用です。コンポーネント/クラス自体のメソッドのメモリフットプリントはありません。そのようなものは、メモリに一度だけ格納され、参照されます。

考えられる考慮事項の 1 つは、CFC の各メソッドが独自の個別のクラスとしてコンパイルされることです (理由はわかりません)。したがって、各メソッドは独自のクラスです。これはおそらく、Java クラスの使用に比べて CFC の使用のメモリ フットプリントがわずかに大きいことを意味しますが、これはオブジェクトのインスタンス化に対応できるものではありません。オブジェクトの各インスタンスは、メソッドではなく、メンバー変数のためにメモリを消費するだけです。オブジェクトを定義する CFC の

于 2012-12-31T10:22:39.230 に答える
0

すべての cfm ページは、デフォルトでメモリにコンパイルされます。CFC は、毎回インスタンス化するのを避けるために、メモリ (アプリケーション スコープなど) に暗黙的に格納する必要がありますが、同じコンポーネントに対して同じメモリが必要です。コンポーネントまたは Bean 内に保存しているデータによって異なります。ColdSpring を見たことがありますか?

于 2012-12-31T02:06:16.220 に答える