背景: 内部に複数のレベルのネストされた図形がある図形のアートワークを描きます。例。それらの形状内のいずれかの形状および面積の長さは、関連するすべての特性および形状を変化させる。内部セッターとのC#インターフェイス
私はこのように書きデザインパターンを持っている:
私は(議論のために)例えば、相互に関連するプロパティのトンを持っている「NestedShapes」、「エリア」と呼ばれるオブジェクトグラフを持っていますと "長さ"。しかし、グラフはダムになるように設計されています。つまり、いずれかの値が与えられた場合、他の値を計算する方法はわかりません。
代わりに、グラフをグラントマネージャのトップレベルルートノードIRootShapeを取るGraphManagerにアタッチすることができます。
NestedShapesは、INotifyPropertyChangedも実装しているIRootShapeを実装しています。 GraphManagerはこれらのプロパティの変更をサブスクライブし、関連するフィールドを計算するためのロジックを実行し、IRootShapeを使用してグラフを正しい状態に設定します。
問題:IRootShapeとともに 、私は本当のC#のインターフェイスですICircleなどIShape、ISquareを、持っています。しかし、問題はこれらのプロパティのいくつかのためです。私はGraphManagerにプライベートなセッタしか持たないことを望みます。実装のシェイプがまだパブリックセッターを公開する可能性があることを知っていますが、が必要です。はGraphManagerからプロパティを設定できるようにUI側でこれらを公開しません。私は何をすべきか?内部クラスを持つ基本クラスは行く方法を設定しますか?
インタフェースは、外部から見えるものを定義しています。私はベースクラスがあなたの最善の策だと言うことを念頭に置いています。 –
すべてのシェイプで共通の動作が必要な場合は、共通の基本クラスから継承する必要があります。また、なぜあなたは 'ICircle'、' ISquare'などのために別々のインターフェースが必要ですか?なぜ、単にIShapeだけではないのですか? – ja72
@ ja72私はIShape、ISquare、ICircleには状態しかないと言うでしょう。動作はGraphManagerにあります。 – Jake