実際には、より一般的な問題の例である特定の問題を解決しようとしていました。1 つのオブジェクトが他のオブジェクトに依存するオブジェクトがいくつかあるとします。
Bitmap AnImage; // Several instances of this object are possible: an image is loaded; then is discarded; then a new image is loaded, and so on.
Public class PixelSelection
{
string GenericAttribute;
int X;
int Y;
public PixelSelection(string myAttribute, int x, int y)
{
GenericAttribute = myAttribute;
X = x;
Y = y;
}
}
2 番目のオブジェクト:
- この方法で作成されます: new PixelSelection("Whatever", AnImage.Width, AnImage.height) したがって、AnImage オブジェクトに依存します。
- メイン アプリケーションがサブスクライブできるイベントを公開します。
各クラスの 1 つのインスタンスのみが必要であり、両方のオブジェクトがユーザーの要求に応じて作成されます。Bitmap インスタンスなしで PixelSelection を使用することはできませんが、ユーザーが PixelSelection オブジェクトを操作する必要がある場合にインスタンスが必要になります。
私が扱っている問題は、PixelSelection をビットマップと同期させる方法です。これらは私が検討している可能なシナリオです:
- メイン フォームのプロパティとして PixelSelection を宣言し、新しいビットマップが作成されるたびにインスタンス化します。これには毎回新しいイベント登録が必要であり、新しいビットマップの作成が必要になるたびに、開発者は別のコード セクションで参照される新しい PixelSelection オブジェクトをインスタンス化することを覚えておく必要があるため、コードでエラーが発生しやすくなります。
- 最初に PixelSelection オブジェクトをインスタンス化し、すべての Bitmap インスタンスに同じオブジェクトを使用して、コード内で実際に使用されている場所でのみ属性 X と Y を更新します。これには、x および y パラメーターのない新しいコンストラクターが必要です。これは、適切な初期化を行わずにインスタンスに対してアクションを実行しようとするときに使用できる Bitmap と、PixelSelection の不一致を管理するコードがないためです。
- Bitmap と PixelSelection オブジェクトを持つラッパー オブジェクトをプロパティとして使用します。これは、Bitmap が割り当てられている場合に PixelSelection オブジェクトを適切に作成または更新するためだけに使用されます。このラッパーはソリューション ドメイン モデルに適合しないため、これは非常に不自然 (または汚い) に聞こえます。これは、非常に特定の問題を解決するための回避策にすぎません。
- プロパティとして PixelSelection を持つ Bitmap から派生したクラスを作成し、そのライフサイクルを明白な方法で管理します。これは、何かをモデル化するためではなく、オブジェクトのライフサイクルのニーズと使用パターンに対処するためだけに存在する一連のオブジェクトで満たされる超脂肪クラスにつながる可能性があります。
私が下書きした 4 つの暫定的なシナリオは、抽象化が大きく異なり、異なるツールセットを使用しようとしています。さらに悪いことに、オブジェクトのライフサイクルの問題とオブジェクト指向モデリングに関する混乱を示して、オブジェクト指向モデルに対する私の理解が不十分であるという証拠を彼らが示している可能性があると感じています。問題を解決するための最良の方法は何か、ベストプラクティスの観点から、その解決策が適切な答えである理由を特定するのを手伝ってもらえますか? ありがとう。