2008-09-16 6 views
3

システムのコンポーネント間または相互に通信する異なるシステム間で100%デカップリングを達成できますか?私はそれが可能だとは思わない。 2つのシステムが互いに通信する場合、それらの間にある程度の結合が存在するはずです。私は正しい?100%デカップリングを達成できますか?

答えて

0

これを達成できます。ネットワークを介して互いに通信する2つのコンポーネントを考えてみましょう。 1つのコンポーネントはWindows上で動作し、他のコンポーネントはUnix上で動作します。それは100%デカップリングではありませんか?

+0

本当に。それらは互いに話すために使うプロトコルによって一緒に結合されています。私はこれが100%デカップリングであることに同意していますが、100%デカップリングは可能でも実行可能でもないとは思いません。 – Statement

2

コンポーネントが100%デカップリングされている場合は、相互に通信していないことを意味します。

実際にはdifferent types of couplingがあります。しかし、一般的な考え方は、オブジェクトは互いに依存しないと結合されないということです。

0

最低限、特定のインターフェイスからのファイアウォール保護は、少なくとも各マシンからのトラフィックを他のマシンに移動させる必要があります。それだけでは「カップリング」の一形態と考えることができ、したがって、カップリングは、少なくとも一定のレベルまで通信する機械に固有のものです。

0

これは、両方のコンポーネントが理解し、コンポーネント間で直接データを渡さない通信インターフェイスまたはプロトコルを導入することで実現できます。

+0

はい、将来プロトコルを変更した場合は、両方のコンポーネントを変更する必要があります。これはカップリングではないでしょうか? –

+0

さて、私は "カップリング"という言葉を理解しています。デカップリングとは、両方のコンポーネントが互いに何も知らない場合です。彼らは両方とも第3の構成要素の何かを知ることができた。プロトコル。 –

0

お互いを参照していない2つのWebサービスは、100%デカップリングの良い例かもしれません。 カップリングは、両方を使って一緒に "カップル"するアプリケーションutilの形で到着します。

カップリングは本質的に悪いものではありませんが、いつ実行するか(実装時のみ、またはフレームワーク自体であるか)、カップリングが妥当であるかどうかを厳密に判断する必要があります。

2

右。インターフェイスやプロトコルに書き込む場合でも、何かにコミットしています。あなたは平和的に100%デカップリングを忘れることができますし、あなたが何をしていても、HTTPなどの非常に基本的なプロトコルにコミットしていない限り、ただ一つのコンポーネントを外して、 )

私たちの人間は、結局のところLOOVE標準です。だから私たちは...よく、気にしない。

0

コンポーネントが100%直交するように設計されている場合は、可能である必要があります。心配の明確な分離は、これを達成することができます。すべてのコンポーネントが知る必要があるのは、入力のインターフェースです。

カップリングは一方向でなければなりません:コンポーネントはパラメータのセマンティクスを知っていますが、互いに不可知論的でなければなりません。

とすぐに、コンポーネント間の1%のカップリングを持っているように、1%(少し長く続くシステムで)成長を開始

はしかし、多くの場合、知識は、より高い性能を達成するために、ピアコンポーネントに注入されます。

0

2つのコンポーネントが直接通信しなくても、残りの2つを使用する第3のコンポーネントはシステムの一部であり、それらのコンポーネントに結合されます。

@ Vadmyst:コンポーネントがネットワーク経由で通信する場合は、2つのローカルコンポーネントのインターフェイスと同じ種類のプロトコルを使用する必要があります。

0

これは痛いほど抽象的な質問に答えるものです。このシステムが単一アプリケーションのコンポーネントである場合、コンポーネントのデカップリングを容易にするMVC(Model View Controller)やIoC/Dependency Injectionのインタフェースなど、さまざまな手法があります。

CORBAとCOMは、物理的に分離されたソフトウェアアーキテクチャの観点から、ローカルまたはネットワークの相互運用をサポートし、ATLのようなものの「共通の舌」を使用します。これらはSOAPなどのXMLサービスによって非推奨になりました。これは結合を実行するためにWSDLを使用します。 SOAPクライアントが実行時の遅延結合のためにWSDLを使用するのを阻止するものは何もありませんが、めったに見ません。そして、XMLのように最適化されたJSONや、相互運用性を最適化するが、一般にプリコンパイルされ、遅延結合されていないGoogleプロトコルバッファーのようなものがあります。

IPC(プロセス間通信)に関しては、2つのシステムで共通の「プロトコル」を話すだけでよい。これはXMLでもかまいません。共有クラスライブラリでも、独自のものでもかまいません。独自のレベルでさえも、メモリストリーム、TCP/IPネットワーキング、共有ファイル(メモリまたはハードディスク)、またはその他のメカニズムによって、依然として「結合」されていますが、依然としてバイトと最終的には1と0を使用しています。

最終的に質問は本当に公平に答えることができません。厳密に言えば、100%はzilchがお互いに行うシステムによってのみ達成されます。あなたの質問を文脈に合わせる。

0

直接コンポーネントと間接コンポーネントを区別することが重要です。直接接続(別のクラスを参照するクラス)を削除し、代わりに間接接続を使用するように努めます。 2つの「無知」のクラスを、その相互作用を管理する3つのクラスにバインドします。

これは、フォームに置かれた一連のユーザーコントロール、またはデータベース接続プールと接続プーリングクラスのようなものです。より基本的なコンポーネント(コントロールと接続)は上位のコンポーネント(フォームと接続プール)によって管理されますが、基本コンポーネントは別のコンポーネントを知っていません。基本的なコンポーネントはイベントとメソッドを公開し、もう片方は '文字列を引っ張ります'。

0

いいえ、できません。ジョエルの優れた記事The Laws of Leaky Abstractionを読んで、それは多くの人々にとっては目を見張るものです。しかし、これは必ずしもの悪いものではありません。リーキーな抽象化は、潜在的なプラットフォームを悪用可能にするため、大きなチャンスをもたらします。その後、非常に長い時間のために非常に難しいAPIの

0

だと思う、それはそれはほとんど姿を消していた場所になるまで、それは、それはおそらく可能な限り小さなだことを確認してください...

Lego Software Processがこれを提案しています。 .. :) - 実際にはこれを達成しています。

生物の2つの細胞はどのように "密接に結合していますか?

生物内の細胞がまだ通信できますが、その代わりに受信(または送信)についての知識を必要とする任意の手段の部分でそれを行うのは、それらが体内に化学物質を放出することによって、それを行う...;)

関連する問題