JAVA - лучший способ поднять событие - PullRequest
0 голосов
/ 17 февраля 2012

У меня есть вопрос относительно дизайна моей маленькой IRC Framework, просто для изучения событий и наблюдателя JAVA.

Первый вопрос: http://en.wikipedia.org/wiki/Observer_pattern#Critics

Шаблон Observer подвергнут критике[6] за то, что он слишком многословен, привнес слишком много ошибок и нарушает принципы разработки программного обеспечения, такие как недопущение побочных эффектов, инкапсуляция, компоновка, разделение понятий, масштабируемость, однородность, абстракция, управление ресурсами, семантическая дистанцияРекомендуемый подход заключается в постепенном отказе от наблюдателей в пользу абстракций реактивного программирования.

Мне следует использовать шаблон наблюдателя в производственной программе, если его критикуют и, возможно, откажутся в будущем?java.util.observer всегда хороший выбор?

Второй вопрос: у меня есть два объекта.Сервер и канал

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");
    }

В этом случае в канале Iесть все методы public и те, которые вызываются из класса Server ... Есть лучший способ управлять обработкой событий?Я думаю о ObserverPattern, но думаю, что он больше используется в графическом интерфейсе, таким образом, класс бизнес-логики ..

Cheers


Я хочу спросить еще кое-что о Observer ... Почему многолюдям не нравится шаблон JDK Observer и предлагаете реализовать свой?
Зачем изобретать велосипед?

Повторно внедренный наблюдатель, которого я вижу, является тем же наблюдателем JDK ...

Ответы [ 2 ]

0 голосов
/ 17 февраля 2012

Над абзацем, который вы цитировали, Википедия отображает следующее примечание:

Раздел этой статьи «Критика или противоречие» может поставить под угрозу нейтральную точку зрения статьи на эту тему.

Так что это должно считаться мнением, а не установленным фактом.

Единственной ссылкой на эту претензию является статья, которая, по-видимому, не была опубликована ни в одном из рецензируемых журналов, и методика, описанная в этой статье, не получила широкого применения. Таким образом, это просто идея. Возможно, многообещающая идея, но все же просто идея.

Шаблон Observer, с другой стороны, применялся бесчисленное количество раз. Его недостатки и ограничения были тщательно изучены, и ни один из этих дефектов не является достаточным основанием для отказа от шаблона для всех возможных применений.

Похоже, что люди из Википедии пришли к такому же выводу.

Итак, если вам нужно известное количество, и вы не хотите изучать новый язык программирования и новую парадигму, которые могли бы улучшить шаблон наблюдателя, я бы оставил научное исследование ученым и придерживался Классическая модель наблюдателя на данный момент.

0 голосов
/ 17 февраля 2012

Вам не нужно использовать интерфейс наблюдателя из Java. Это даже не использование дженериков. Но вы можете реализовать свой собственный наблюдатель DP.

Относительно вашего сервера / канала Проблема, которую я вижу в этом, состоит в том, что расширение было бы проблемой. Что произойдет, если у вас будет новое событие: event3 в будущем?

Я предлагаю вам иметь список слушателей на сервере. Как только происходит событие, все активируются. Каждый слушатель может быть реализован конкретным классом. Каждый конкретный класс проверяет условие и, если оно удовлетворяет, выполняет его.

...