プログラミングデザインパターン:ファサードかどうか?
-
08-10-2019 - |
質問
私たちのチームの別の男は、彼のWebフレームワークの瓶として私に図書館を提供してくれました。このフレームワークを「私の友人のフレームワーク」と呼びましょう。
彼のフレームワークから必要な特定のクラスがあります。そのクラスによって公開されたプロパティの半分は、私自身のアプリケーションに本当に必要なものです。残りの半分は必要ありません。このクラスのプロパティを取得するには、文字列操作を行う必要があります。私はこのクラスの上に自分のフレームワークを開発するので、依存関係を可能な限り分離したいと思います。たぶん将来、私の別の友人がより良いフレームワークを開発するでしょう。
だから私がしたことは、そのクラスのファサードクラスを生成したことです。私自身のフレームワークは、私のファサードクラスを通じてプロパティにアクセスします。 「私の友人のフレームワーク」が変更された場合、1つのファサードクラスを変更するだけで、残りは同じままです。さらに、弦の操作はファサードクラス内で行われます。また、ファサードクラスは必要なプロパティのみを公開します。したがって、私自身のフレームワークは、通常のゲッター/セッターとしてプロパティにアクセスするだけです。
しかし、私はこの男と議論がありました。彼は最初に彼のクラスの実装を変更することはないので、私にクラスを直接使用することを強制しています。そこで、彼は、ファサードクラスを書くことは本当に価値がないと言っています。しかし、私は同意しません。
私が間違っている?私は正しいと信じています。
解決
あなたは原則として間違っていません。
あなたがしていることはファサードではないという点であなたは間違っています。ファサードは、多くのサービスを備えたAPIがある場合に、より一般的に使用されます。これらすべてのサービスを一緒に使用できますが、それは複雑になる可能性があります。パターンは、単一のAPIインターフェイスであるファサードを立てることです。これは、サービス呼び出しを使用可能な論理アクションに調整することです。
あなたがしていることは、アダプターパターンのようなものです。あなたは彼のクラスをあなたのクラスの前に別のクラスを置くことであなたのユースケースに適応させています。
注意してください、私は単に意味的な問題を指摘しているだけです。実際には、あなたがしていることは良いデザインの練習です。
また、将来の更新を実際に計画していない場合は、トラブルを通過する必要がないかもしれないことに注意してください。たぶんヤグニ - あなたはそれを必要としません。
他のヒント
私には良いデザインのように聞こえます。
ファサードは通常、クラスのより大きなサブシステムへのインターフェイスを提供しますが、ファサードを使用して1つの複雑なクラスにアクセスできない理由はわかりません。
他の人が頑固であるように聞こえるので、彼のフレームワークから切り離すのは良いと思います。
あなたのファサードが使いやすい場合は、彼にこれを彼のフレームワークに追加して、他のすべての人にも提供することができます。
あなたのアプローチは私にはいいですね。
フレームワーク全体の実際の実装から非常に独立したインターフェイスを作成してください。他の人は、それがアダプターであることを指摘していますが、あなたが単一のクラスを切り離そうとしているからですが、クラスは他のクラスと結びついていると思います。
質問に答えてみてください:このファサードはどのような秘密を隠すべきですか?説明できるように、公開したい方法のいくつかを投稿してみてください。