0

JAVAイベントとオブザーバーを学習するためだけに、私の小さなIRCフレームワークの設計に関して質問があります..

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

オブザーバー パターンは、冗長すぎる、バグが多すぎる、副作用の促進、カプセル化、構成可能性、概念の分離、スケーラビリティ、均一性、抽象化、リソース管理、セマンティック ディスタンスなどのソフトウェア エンジニアリングの原則に違反していると批判されています[6]。 . 推奨されるアプローチは、オブザーバーを徐々に廃止し、リアクティブ プログラミングの抽象化を優先することです。

批判され、将来廃止される可能性がある場合、本番プログラムでオブザーバーパターンを使用する必要がありますか? java.util.observer は常に良い選択ですか?

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

サーバー.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");
    }

この場合、チャネルにはすべてのメソッド public があり、それらは Server クラスから呼び出されます...イベント処理を管理するより良い方法はありますか? 私はObserverPatternで考えていますが、GUIのもの、つまりビジネスロジッククラスでより多く使用されていると思います..

乾杯


Observer に関してもう 1 つ聞きたいことがあります...なぜ多くの人が JDK Observer パターンを嫌い、あなたの実装を提案するのですか?
なぜ車輪を再発明するのですか?

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

4

2 に答える 2

0

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

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

サーバーにリスナーのリストを用意することをお勧めします。イベントが来ると、すべてがアクティブになります。各リスナーは、具体的なクラスによって実装できます。各具象クラスは条件をチェックし、満たしていれば実行します。

于 2012-02-16T22:34:36.057 に答える
0

引用した段落の上に、ウィキペディアには次の注記が表示されます。

この記事の批判または論争のセクションは、この記事の中立的な視点を損なう可能性があります。

したがって、これは確立された事実ではなく意見と見なされます。

その主張の唯一の参考文献は、どの査読付きジャーナルにも明らかに掲載されていない論文であり、その論文に記載されている技術が広く適用されていないことも明らかです。そのため、それは単なるアイデアです。おそらく有望なアイデアですが、それでも単なるアイデアです。

一方、Observer パターンは数え切れないほど適用されています。その欠陥と制限は徹底的に調査されており、これらの欠陥のいずれも、考えられるすべてのアプリケーションに対してパターンを非推奨にする十分な根拠にはなりません。

ウィキペディアの人々も同じ結論に達したようです。

したがって、既知の量が必要で、オブザーバー パターンを改善する可能性がある新しいプログラミング言語と新しいパラダイムを学びたくない場合は、科学的調査を科学者に任せ、従来のオブザーバー パターンに固執します。今のところ。

于 2012-02-16T22:56:26.167 に答える