一度だけのクラスからデータを隠すにはどうしますか?
-
05-07-2019 - |
質問
全体を書き直すことなく、ソフトウェアの一部で最近遭遇した設計上の欠陥を修正しようとしています。サーバーからデータを受信するメッセージリスナースレッドを持つ.exeがあり、受信したすべてのデータ(ほとんどが静的)を格納する別のDLL(StaticDataClassと呼びます)のクラスに書き込みます。起動時にデータベースから取得されます)。このクラスは、他のクラスがデータを取得するために使用できるメソッドも提供します。問題は、ストア(セット)メソッドがすべてパブリックであるため、他のクラスがこのデータを上書きしてアプリケーション全体を破壊する可能性があることです。実行可能ファイル自体に含まれるオブジェクトを除くすべてのオブジェクトのデータを保護する(set / storeメソッドを非表示にする)良い方法は何ですか?
今は、パブリックゲッターのみを定義するインターフェイスをいじり、そのインターフェイスをシングルトンクラスに実装してから、Instanceプロパティがインターフェイスタイプを返すので、宣言されたgetメソッドのみを使用できますインターフェイスで。ただし、実行可能ファイルは起動時に、インターフェイスタイプではなくStaticDataClassオブジェクトへの実際の参照を何らかの方法で取得するため、store / setメソッドも呼び出すことができます。
これは完全な証拠ではありませんが、Visual Studio intellitypeを使用するとコーディング時に表示されるため、これらのパブリックストレージメソッドを使用しても大丈夫だと考えることはできません。代わりに、オブジェクトをストアメソッドを含む型としてキャストすることで、それを壊そうとする必要があります。
これを行うよりクリーンな方法はありますか?
解決
setメソッドを内部にし、InternalsVisibleToAttributeを使用して、優先実行ファイルへのアクセスを許可できます。
他のヒント
同意します-信頼できるアセンブリに内部を可視化することは、あなたがやりたいことを達成する最も簡単な方法のように聞こえます。