2011-07-09 16 views
-1

インターフェイス、インターフェイスクライアント、および継承をパッケージ化する方法について1つの問題が発生しました。つまり、以下の本では、SwitachableがLightではなくコンポーネントとしてSwitchを一緒に配備する方が適切であると述べました。インターフェイス、インターフェイスクライアント、継承、ソフトウェア設計の原則、パッケージング問題

私が理解したいのは、SwitchとSwitchableの両方が、SwitchableとLightではなく、1つのコンポーネントにパッケージ化されているということです。

両方のシナリオが有効なケースがあると思います。そのデザインのoppoisteである1つの例は、IStream、FileStreamは1つのコンポーネントにあり、ISreamクライアントは別のコンポーネントにあります。

以下は、C#ch 33、p497のunclebobのアジャイルからのものです。 SwitchableからLight継承しているので

enter image description here

+2

あなたの質問は何ですか? – edutesoy

+0

@edutesoy冒頭の私の更新を参照してください。 – Pingpong

+0

あなたの質問は何ですか?アップデートは素晴らしく、すべてですが、あなたは何も尋ねていません。 –

答えて

1

、またSwitchableで展開することができる - それは思われ、しかし、命名に、Switchableインターフェースと相互作用主要クラスがSwitchなること - を意味2つは緊密に結合されています。厳密に結合されたクラス/インタフェース定義を決して別のアセンブリに配置しないでください。

OutletAppliancesのように、他のSwitchableクラスも考えられます。これらは後で追加することができ、Lightとは無関係です。つまり、LightSwitchableは必ずしも同じコンポーネントの一部ではありません。ただし、Switchクラスはこれらの新しいクラスにも適用され、適用されます。

Switchableインターフェイスの別のコンシューマが考えられる可能性はありますが、最後に呼び出されたメソッドを覚えてオン/オフ状態を切り替えたToggleButtonのように、やりにくい可能性があります。選択された名前はSwitchableで、まだSwitchが関与している可能性があります)。

+0

ありがとうございました。 私はあなたを指摘しています。 両方のシナリオが有効な場合があると思います。たとえば、IStream、FileStreamは1つのコンポーネントにあり、ISreamクライアントは別のコンポーネントにあります。さらに、名称(すなわち、スイッテ(Siwtch、Switable))は、他の方法ではなく、デザインによって決定される。 – Pingpong

+0

ええ、それはインタフェースのコンテキストに依存します。例えば、 'IStream'の例では、クライアントは特定のケースになりますが、' FileStream'はそうではありません。 'Light'は' Swtichable'の特定のケースです。ここで 'Switch'はそうではありません。 –