2009-03-08 9 views
1

私は製品イメージクラスを持っています。これは、画像(例えば、製品の場合、画像を扱う場合のCMSのためのものなど)に関する一般的な作業のための再利用の可能性を有するオブジェクトである。標準の.NETクラスを使用して、ファイルのタイトルを設定し、簡単な方法でイメージを編集できます。構造体と共有リソースの静的クラス

私はstructを使うことができます。つまり、構造体を5つの異なる場所に使用すると、それは5つの異なるメモリ位置ですが、お互いに独立しています。これらのメモリ位置が他のメモリ位置に影響を与えない状態を変更します(これが望ましい動作です)。オブジェクトを要求するときにボックス化されます。

オブジェクトはインスタンスベースです。したがって、すべての製品は製品オブジェクトを使用し、画像で作業する(たとえば、タイトルの編集など)。

静的クラスを作成すると、1つのオブジェクトを参照する5つの異なる場所です。だから私はスレッドの同期を世話をする必要があります。この共有リソースへのアクセスをどれだけうまく同期させるかにかかわらず、別のアクセスが変数を上書きする可能性があるため、変数に書き込むことはできません。だから私は常に新しい変数を返す必要があります。また、多くの異なる呼び出しメソッドで使用される静的クラスを使用すると、キューが共有リソースにアクセスします。ユーティリティクラスは静的であり、ユーティリティであるため、コードベース全体で多くのクラスで使用されます。この状況で静的クラスを使用することはおそらく賢明ではありませんか?

MSDNのドキュメントで説明しているように、グローバルエンティティにのみ静的クラスを使用します。したがって、コードベースについての詳細をカプセル化したクラス - コードベースは1つしかありません。このクラスには、行数などの詳細が含まれます。これは、オーダークラスのようにインスタンスベースではありません(1顧客-1注文-1以上の注文)。

このようなシナリオでは、おそらく構造体を代わりに使用するのは良い設計の決定ですか?

答えて

2

このタイプをどのように使用したいかはわかりませんが、不変の参照タイプを作成するのが最善のように思えます。 .NETでは独自の構造体を作成することはほとんどありません(特に "製品"構造体は間違った選択肢のように聞こえます)。静的なクラスはカウンターのようなものを除いては一般的に可変状態を持つべきではありません。

通常のクラスに入らなかった理由はありますか?コンテンツを変更している親を気にすることなく、複数の「親」間で1つのインスタンスを共有できるようにする場合は、不変にしてください.-古いものに基づいて新しいインスタンスを返しますが、何らかの方法で変更されたメソッドを追加してください。String.Replaceそうです。

+0

こんにちは。私は標準の画像クラスを作るつもりです。要件はeコマースエンジンの要件ですが、再利用の可能性はすぐにわかります。私が参照型のために行っていない唯一の理由は、1回の参照が変更されたときにすべての参照を変更するためでした。私はそれが不変でref型でなければならないと思います。 – dotnetdev

+0

いいえ、不変の参照型が適切な場所の素晴らしい例のように聞こえます。 –

+0

である。このオブジェクトは、システムのさまざまなサブシステムで使用されるため、変更することはできません。構造体を使用する理由は、パフォーマンスではなくシナリオに基づいているようです。私が間違っているなら、私を訂正してください。ボクシングを避けるために、私は構造体を使用し、値型paramを求めるメソッドを作成することができました。 – dotnetdev

7

私の意見では、パフォーマンスの問題を心配する時間は、パフォーマンスの問題が発生した後です。それまでは、コードを作成して保守しておくことを心配してください。あなたは、それほど重要ではないパフォーマンスの向上を追跡したり、誤ったパフォーマンスの問題を解決したりする可能性があります。

関連する問題