2008-08-28 13 views

答えて

24

はい、そうです。オブザーバーパターンはパブリッシュ/サブスクライブパターンとも呼ばれ、まさにイベントによって可能になります。

+1

、参照http://stackoverflow.com/questions/1023329/observer-pattern-implemented-in-c-sharp-with-delegates私は好きではない – kmote

4

そうです、イベントはオブザーバーパターンの実装です。しかし、私はまだ自分自身を書いている人たちの議論を読んだり、柔軟性を与えたり、イベントの起きる文法を避けるために議論を読んだりしています。

7

はい、同じです。

注:実際にイベントを理解したい場合は、オブザーバーパターンを学習し、しばらくそれを実装することをおすすめします。あなたがそれを完全に理解したら、自分でやることをやめ、本当に必要な場合を除いて、専門的かつ文書化された実装を使用してください。

21

私は、デルファイの経験に基づいて、オブザーバーパターンをC#のイベントでファーストクラスの言語機能にするのはAnders Heljsbergの意図だったと言います。 Anders氏は、このような設計意図を、Software Engineering Radioの優れたインタビューで明確にしています。

0

ほとんどの現代の言語は、いくつかのデザインパターンをネイティブサポートしています。明示的に実装する必要がなくてもネイティブでサポートされるパターンが多いほど言語は優れていると主張されており、この点でLispは優れています。ジェフはそれについてもsomething to sayでした。

4

はい、ただし、オブザーバーパターンを明示的にプログラミングして、代理人やイベントを使用しないと、コードを簡単にデバッグできます。

は違いを考えてみましょう:

public void NotifyObservers() 
{ 
    foreach(Product product in ProductList) 
    { 
     if (product is IProductObserver) 
     { 
       product.Update(this) 
     } 
    } 
} 

ここでは、変更の通知を受ける、リスト内のどのような製品は非常に明確です。デバッグ中にProductListを検査することができます。

デリゲートとイベントを使用すると、イベントを処理するために実際に「デリゲート」がいくつあったかを知ることは面倒です。

+0

開発者に再利用の代わりに再実装を促す考え。 –

+2

これについて詳しく説明できますか?つまり、どちらの場合でも開発者はパターンを実装する必要があります。私は基本的に明示的な例としてこれを書いています。なぜなら、あなたが実際に観察者のパターンを理解したいのであれば、最初にそれを構築し、後にイベントに行くことが最善であると私はDinahに同意しているからです。 – Hace

-2

いいえ、同じ目的を達成しますが、違いはあります。 Observerパターンは、関数型プログラミングで簡単に達成できたことを達成するための設計のかなりのハックであり、.NETイベントは同じ目的を達成するために関数型プログラミングを使用すると言います。

0

Microsoftイベントと代理人を使用すると、オブザーバーパターンを適用する方法がc#であることを示しています。 イベントとデリゲートにいくつかの基本的な命名規則を使用して、独自のパターンを「イベントパターン」と命名しました。これは古典的なものよりもいくつか特別な利点を提供します。オブザーバーパターン

「イベントパターンは、」は記事「オブザーバーデザインパターンを探る」の内側にMSDNライブラリに記載されています。イベントや代表者に基づいて

Reference MSDN Article

、FCLはかなり広範囲にObserverパターンを使用しています。 FCLの設計者は、このパターンの本質的な力を完全に理解し、フレームワーク全体でユーザーインターフェイスと非UI固有の機能の両方に適用しました。しかし、この使用は、フレームワークチームがEvent Patternと呼んでいるBase Observerパターンのわずかなバリエーションです。一般に、このパターンは、イベント通知プロセスに関わるデリゲート、イベント、および関連するメソッドの正式な命名規則として表現されます。マイクロソフトは、Observerパターンのこの調査に基づき、CLRまたは標準のコンパイラ

には強制はありませんが、イベントとデリゲートを使用するすべてのアプリケーションやフレームワークは、このパターンを採用することをお勧めします、このパターンが提供することは明らかですそれらの機能(UIなど)に関係なく、アプリケーション内のオブジェクト間の鮮明な境界を保証する理想的なメカニズムです。コールバック(IObserverインターフェイスとIObservableインターフェイスを使用)を使用して実装するのはかなり単純ですが、CLRの代表者とイベントの概念は、大部分の「重量挙げ」を処理し、被験者と観察者の間の結合レベルを低下させます。この質問へのわずかに異なる答えを

関連する問題