1

アプリケーション スコープで作成されたコードをロックする必要があるかどうか疑問に思っています。アプリケーション スコープで userDAO.cfc というオブジェクトを作成すると、すべてのページで使用できるようになります。次に、そのオブジェクトに、アプリケーションのさまざまな部分で呼び出される getUserInfo(userID) というメソッドがある場合、このメソッドをロックする必要がありますか?

4

1 に答える 1

4

短い答え: おそらく違います。

そのオブジェクトが Application.cfc の OnApplicationStart() メソッド内からアプリケーション スコープで作成され、変更されず、すべての関数のすべての変数を確実に var にする場合、アクセスをロックする必要はありません。それに。

この場合、OnApplicationStart() がロックを行い、そのメソッドが作成されるまで誰も先に進めません。これは、アイテムの作成を 1 回だけ許可し、他のユーザーが使用する前にアイテムが存在することを確認できるため、優れています。

ランダムなページの上部など、他の場所からオブジェクトをインスタンス化する場合は、はい、こことそれを参照するすべての場所でロックする必要があります。

オブジェクトが別のオブジェクトに変更される場合、またはプライベートまたはパブリック変数 (variables.* または this.*) のように他のものに変更される状態を保持する場合は、外部からロックするか、ロックを試すことができます。変数ごとに cfc 内に配置します。

最後に、すべての変数を var 化しない場合 ( Mike Schierberl の varScoper を使用してください! )、オブジェクトの状態を変更することになります。ここまで来るべきではありませんが、これはロックのケースです。

全体の大きな例外は、CF 5 以下を使用している場合です。この場合、すべての共有スコープ アクセスをロックする必要があります。また、CF 6 または 6.1 を使用している場合、Application.cfc はありません。

于 2008-11-19T15:10:30.700 に答える