ASP.net クライアント アプリケーションでの WCF Windows サービスの実装の設計パターンについて同僚から質問されましたが、それがBridgeなのかAdapterなのか本当にわかりませんでした。
実装は次のとおりです。
- サービス契約を取得しました
- 私の WCF Data コントラクトに似た新しいインターフェイスを定義しました
- WCF クライアントを作成し、新しいインターフェイス内にラップしました
- 新しいインターフェイス操作を元の WCF クライアントにマップしました (ここでいくつかのログ記録/エラー処理を行います)
私はいつもそれをAdapterパターンの実装と考えていましたが、実際にはなぜBridgeではないのかわかりません!
SO、GoF、ウィキペディアのすべての投稿を読みましたが、本当に意味がありません!
私の理解では、両方のパターンが既存の型を指しており、両方とも抽象化をその実装から切り離しています。
以下は GoF からの引用です。
これらのパターンの主な違いは、その意図にあります。アダプターは、2 つの既存のインターフェース間の非互換性を解決することに重点を置いています。これらのインターフェイスがどのように実装されるかには焦点を当てておらず、それらが独立してどのように進化するかについても考慮していません。これは、独立して設計された 2 つのクラスを、どちらか一方を再実装することなく連携させる方法です。一方、ブリッジは、抽象化とその (潜在的に多数の) 実装を橋渡しします。それを実装するクラスを変えることができるにもかかわらず、クライアントに安定したインターフェースを提供します。また、システムの進化に伴う新しい実装にも対応します。
上記の説明がよくわかりませんが、
- 設計時にアダプティーを変更したり、元のインターフェイスの実装を変更したりすると、それはBridge Patternになるということですか?
- 違いは些細なことに聞こえますが、実装/抽象化に他に違いはありますか?
- 開発後にどの実装が使用されているかを誰がどのように知ることができますか?
- ブリッジ パターンの良い例と、ソフトウェア ライフサイクル中に変更する方法を教えてください。
アップデート:
再びGoFから:
アダプタは、まったく新しいインターフェイスを定義するのではなく、2 つの既存のインターフェイスを連携させることに注意してください。
既存のインターフェースを別のインターフェースで動作するように変更することは、Adapterの実装であるということですか?
アップデート2:
この素晴らしい記事を見つけました: C# での GOF デザイン パターンの図解
これが真のブリッジ パターン構造です。
Bridge パターンを使用すると、さまざまな抽象化と実装を組み合わせて、それらを個別 に拡張できるという事実を見逃していました