0

を上げるために、私はちょうどJAVAイベントとオブザーバを学習するための私の小さなIRCの枠組みの質問についての設計を、持っている最良の方法..JAVA - イベント

最初の質問: http://en.wikipedia.org/wiki/Observer_pattern#Critics

Observerパターンがありますカプセル化、合成、概念の分離、スケーラビリティ、統一性、抽象化、資源管理、意味論的距離の促進など、あまりにも冗長で、あまりにも多くのバグを導入し、ソフトウェア工学の原則を侵害すると批判した[6]。推奨されるアプローチは、反応性プログラミング抽象化を支持してオブザーバーを徐々に非難することです。

私は、プロダクションプログラムでオブザーバーパターンを使用する必要があります。これは将来批判され、おそらくは削除されるでしょうか? java.util.observerは常に良い選択ですか?

2番目の質問:2つのオブジェクトがあります。サーバーとチャンネル

Server.java

public Server { 
    public Server() { 
     // Some stuff 
     channelList = new ArrayList<Channels>(); 
    } 

    public Channel searchChannel(String channel) { 
     // Implements searching channel 
    } 

    public void parseMessage() { 
     if (someCondition1) 
      onEvent1(); 
     elseif (someCondition2) 
      onEvent2(); 
    } 

    public void onEvent1(String channel, String param) { 
     channel = searchChannel(channel); 
     channel.onEvent1(param); 
    } 

    public void onEvent2(String channel, String param) { 
     channel = searchChannel(channel); 
     channel.onEvent2(param); 
    } 
} 

** Channel.java **この場合

public Channel { 
    public Channel(Server server) { 
     // Some stuff 
     this.server = server; 
    } 

    public void onEvent1(String channel, String param) { 
     // Stuff for Event1 fired from Server 
     server.responseAtEvent("blablabla"); 
    } 

    public void onEvent2(String channel, String param) { 
     // Do stuff for Event2 from Server 
     server.responseAtEvent("blablabla"); 
    } 

は、チャネルに私はすべてのメソッドを公開する必要があり、それらがサーバーから呼び出されますクラス... イベント処理を管理するより良い方法はありますか?私は多くの人が嫌いなのはなぜ別のものの点のオブザーバー... をお願いしたいと思います

乾杯


..私はObserverパターンで考えて、私はそれはGUIのものので、ビジネスロジッククラスにより使用さだと思いますJDK Observerパターンを実装し、あなたの実装を提案しますか?
なぜホイールを再発明するのですか?

私が見ている再実装されたオブザーバは、JDKの同じオブザーバです。

答えて

0

Javaのオブザーバインタフェースを使用する必要はありません。 ジェネリック薬を使用していません。 しかし、独自のオブザーバーDPを実装することができます。

あなたのサーバー/チャンネルについて 私が見ている問題は、それを拡張することが問題になることです。 新しいイベントがある場合はどうなりますか?今後のイベント3:

サーバーにリスナーのリストを作成することをお勧めします。 イベントが到着すると、すべてがアクティブになります。 各リスナーは具象クラスで実装できます。 各コンクリートクラスは条件をチェックし、条件を満たす場合はそれを実行します。あなたが引用された段落の上

+0

私の最初の質問は、すべてのメソッドpublicを持っている点です。私はカプセル化のための良い方法ではないと思うので、関連する各チャンネルに 'public void spamMessage(message)'のようなメソッドを書く必要があります。そのサーバー... – Kaiser69

+0

もちろん、パブリックメソッドはカプセル化を中断します。その作品をチャンネルに渡すことを好むとは思わないでしょうか?そうすれば、サーバーはイベントをリスナーに渡すだけで、それぞれが必要な処理を行います。 –

+0

はい、私はこの方法で動作する小さなフレームワークを書きました。しかし、少し簡単です(静的なタイプミス、パブリック/プライベートなし)。 - リスナー/イベントリスナーを監視して実装するためのヒントを提案できますか?ありがとう – Kaiser69

0

、ウィキペディアには、以下の注意事項が表示されます。

この記事の批判や論争セクションでは、対象のビューの記事の中性点を損なうことがあります。

これは確立された事実ではなく、意見とみなされます。

その主張の唯一の言及は、査読されたジャーナルには明らかに掲載されておらず、広範囲に適用されていることが記載された技術もない。したがって、単なるアイデアです。有望なアイデアは、おそらく、まだ単なるアイデアです。

Observerパターンは、何回も適用されています。その欠陥と限界が完全に探究されており、これらの欠陥のどれも、すべての可能性のあるアプリケーションのパターンを非難するための十分な根拠ではありません。

ウィキペディアの人々は同じ結論に達しているようです。

既知の数量が必要で、観測者のパターンを改善するための新しいプログラミング言語と新しいパラダイムを習得したくない場合は、科学者の探究を科学者に任せ、今のところ古典的なオブザーバーのパターンです。

関連する問題