2010-12-10 1 views
4

私たちのチームのもう一人の人が、自分のWebフレームワークのためのライブラリとして私にライブラリを提供しました。このフレームワークを「My Friend's Framework」と呼ぶことにしましょう。プログラミングデザインパターン:ファサードかどうか

私は彼のフレームワークから必要なクラスがあります。そのクラスで公開されているプロパティの半分は、自分のアプリケーションに本当に必要なものです。もう半分は必要ありません。このクラスのプロパティを取得するには、いくつかのString操作を行う必要があります。このクラスの上に私自身のフレームワークを開発しているので、可能な限り依存関係を切り離したいと思っています。多分将来、私の別の友人がより良いフレームワークを開発するでしょう。

私がしたことは、そのクラスのファサードクラスを生成したことです。私自身のフレームワークは私のファサードクラスを通してプロパティにアクセスします。 「My Friend's Framework」が変更された場合、1つのファサードクラスを変更するだけで、残りは同じままです。さらに、ストリング操作はファサードクラス内で行われます。また、ファサードクラスは必要なプロパティのみを公開します。だから私自身のフレームワークは、通常のgetter/setterとしてプロパティにアクセスするだけです。

しかし、私はこの男と議論しました。彼は最初に自分のクラスの実装を変更することはないので、私は自分のクラスを直接使用するように強制しています。だから彼はファサードクラスを書くことは本当に価値がないと私に伝えます。しかし、私は同意しない。

私は間違っていますか?私は正しいと信じています。

+2

「彼は自分のクラスを直接使用するように強制しています。どうやって?彼はあなたのためにコードを入力していますか? –

+1

あなたは正しいと思います。あなたがよりスマートな開発者であるように思えます(おそらく、あなた自身のために少し余分な仕事をすることに与えられるかもしれません)。 hvgotcodesの答えは私がおそらく言うことができるすべてをカバーしています。今回はアダプタクラスのAPIを常にラップしています。今回は奇妙な部分だけがあなたの友人が書いています。 –

+0

あなたは本質的にインターフェイスにコーディングして、そのコンポーネント用のアダプタを作成しています。いいですね。しかし、(おそらく "プロパティ"のあいまいな概念のために)、あなたはインターフェースがゲッターやセッター以上のものになりたいと思うかもしれません...ちょっと考えてください... – lijie

答えて

10

あなたは原則として間違っていません。

あなたがしていることがファサードではないということが間違っています。ファサードは、サービスがたくさんあるAPIを使用している場合に、より一般的に使用されます。これらのサービスを一緒に使うことはできますが、それは複雑になる可能性があります。このパターンは、サービス呼び出しを使用可能な論理アクションに調整するファサードである単一のAPIインターフェイスを立てることです。

あなたがやっていることは、アダプタパターンによく似ています。別のクラスをクラスの前に置くことによって、クラスをユースケースに適応させます。

私は単に意味論的な問題を指摘していることに注意してください。実際には、あなたがやっていることは良いデザインの実践です。

また、今後更新を予定していない場合は、問題を解決する必要はありません。たぶんYAGNI - あなたはそれを必要としないでしょう。

+0

"プリンシパル"ではなく "プリンシパル" – lijie

+0

@lijie roger that。 – hvgotcodes

+0

あなたは正しいと思います。意味的には、実際にはアダプタパターンです。私は本当に他のチームの他の人を信用していない。よく知られているフレームワークを使用する代わりに、彼は自身のフレームワークを主張しなければならなかった。私は躊躇が正当だと思う:) – chris

1

私には良いデザインのようなサウンドです。

ファサードは通常、より大きなクラスのサブシステムとのインターフェイスを提供しますが、ファサードを使用して1つの複合クラスにアクセスできない理由はわかりません。

他の人が頑固なように聞こえるので、彼のフレームワークから切り離すと良いと思います。

あなたのファサードが使いやすくなっていれば、彼のフレームワークにこの機能を追加して他の人にも提供することができます。

+0

実際に彼は私が開発しているフレームワークを自動生成したいので頑固だ。彼は私が作成したアダプタクラスを、自分が持っているものよりも簡単なラッパーであると自動的に生成するのは難しいと主張しています。 – chris

1

あなたのアプローチはよかったです。

WHOLEフレームワークの実際の実装とはまったく独立したインターフェイスを作成してください。他の人は、あなたが1つのクラスを切り離そうとしているという理由だけで、それがアダプタであると指摘しましたが、クラスが他のクラスと結合していると思われます。

質問に答えるようにしてください。この正面はどのような秘密に隠れていますか? 私たちが議論できるように公開したいメソッドのいくつかを投稿しようとしてください。

+0

これは本当に1つのクラスだけをデカップリングしていますが、このアダプタクラスはフレームワーク全体の中心です。本質的にモデルコンテナです。モデルの単一または配列のプロパティを移送する代わりに、必要なすべてのプロパティを含むモデルクラスを移送します。それはあなたのメソッドの周りにxmlを運ぶ代わりに、POJOに相当するものを移送するのと似ています。 – chris

関連する問題