Ответы пользователя по тегу Java
  • Пример JAVA-приложения с использованием MVC?

    serso
    @serso
    Например:
    class MyView extends JFrame {
        ...
        JButton button = new JButton();
        button.addMouseListener(new MouseAdapter() {
            public void mouseClicked(MouseEvent e) {
                Controller.getInstance().fireEvent(Events.OPEN_WINDOW);
            }
        });
        ...
    }
    


    В контроллере:
    void fireEvent(Event event) {
        for (Listener listener: listeners) {
            listener.onEvent(event);
        }
    }
    


    Сам контроллер может быть event слушателем:

    Controller implements Listener {
    ...
       void onEvent(Event event) {
            if ( event.equals(Events.OPEN_WINDOW) ) {
                // put here code for initializing and opening the window
                // NOTE: new window also can be listener of specific events
            }
        }
    ...
    }
    


    И работа с моделью:
     class MyView extends JFrame {
        ...
        JButton button = new JButton();
        button.addOnTextChangeListener(new TextChangeListener() {
            public void textChanged(TextChange e) {
                Controller.getInstance().fireEvent(new Event(Events.TEXT_CHANGE, e.getNewText()));
            }
        });
        ...
    }   
    
    Controller implements Listener {
    ...
       void onEvent(Event event) {
            if ( event.equals(Events.TEXT_CHANGE) ) {
                // find and update the module
                getTextContainer().setText(event.getData());
            }
        }
    ...
    }
    


    Естественно, TextChangeListener придуман для упрощения понимания, не знаю есть ли такой в Swing'e
    Ответ написан
    9 комментариев
  • Пример JAVA-приложения с использованием MVC?

    serso
    @serso
    Всё просто — контроллер координирует действия. В вашем случае я бы сделал класс который умеет регистрировать слушателей и управлять событиями.

    Окошки с кнопками — это вьюхи. Они регистрируются на некоторые события в контроллере, и сами вызывают контроллер для посылки события.

    Модели в вашем примере — нет. Можно добавить модель, например, объект, который будет храниться в контроллере и содержать текст из первого окна. Этот объект соответственно должен обновляться контроллером по событию окна с текстовым полем, а также текст в окне с текстовым полем должен выставляться из этого объекта контроллером.
    Ответ написан
    3 комментария
  • maven: использование модуля в качестве плагина

    serso
    @serso
    Естественно Maven умеет работать с зависимыми друг от друга модулями, но важно чтобы у всех модулей и их зависимостей были правильно прописаны
    <groupId>, <artifactId>, <version>, <packaging>/<type>

    На этапе сборки Maven покажет что-то типа:
    Scanning for projects...
    Reactor build order:
    module-a
    module-b

    откуда можно понять как Maven разрулил зависимости.
    В вашем случае (когда модуль является плагином), честно скажу что будет не знаю, но почему-то мне кажется, что такой сценарий не предусмотрен разработчиками Maven'а. Поэтому всегда можно (да и нужно, наверное) вынести данный модуль в отдельный проект и установить его один раз.
    Ответ написан
  • Класс для работы с датой в Java?

    serso
    @serso
    Как уже советовали выше — Joda. Но есть ещё одна альернатива — time4j.
    Совет от себя — храните дату всегда в одной временной зоне, и только при выводе переводите в нужную: stackoverflow.com/questions/508019/jpa-hibernate-store-date-in-utc-time-zone
    Ответ написан
    Комментировать
  • Code Review Java?

    serso
    @serso
    Пожалуй начну жёсткую критику:
    1. Проект под мавеном — это хорошо, но плохо что он не поддерживает
    стандартную структуру каталогов проекта
    2. Config.parseConfiguration() — зачем самомоу парсить? Для этого есть уже написанные библиотеки типа Commons CLI для работы с коммандной строкой и Commons Configuration для хранения настроек (естественно, это можно заменить на что-нибудь другое но посыл, я думаю, понятен)
    3. Java code conventions нужно поддерживать — название класса isCloneable, имя пакета parserHandlers и
    private List<SuiteResult> _results;
    не есть хорошо
    4.
    if ( ... && command != -2)
    — это ад. Что значит константа -2?
    5. Нет такого слова Formater, нужно Formatter
    6.
    stringBuilder.append("[" + result.getTestSuiteName() + "]\r\n")
    — используете StringBuilder и зачем-то конкатенируете строки
    7.
    if (Config.isRunnable() == false)
    — так не пишут, используйте операцию отрицания.
    8. Вместо ParserHelper и статичных методов опишите интерфейс — мало ли откуда входные данные придётся парсить (Естественно, в качестве дефолтной реализации используйте свой код для парсинга из xml)
    9.
     public Command[] getCommands() {
            return commands.toArray(new Command[commands.size()]);
        }
    — почему бы список не возвращать? Вам действительно где-то нужен массив?
    10.
                        } catch (CloneNotSupportedException ex) {
    — выбрасывние CloneNotSupportedException — ошибра разработчиков java, с своих классах рекомендуется убирать из сигнатуры.

    Я думаю остановлюсь на этом. В плане архитектуры настоятельно рекомендую глянуть как реализована, например, библиотека jUnit
    Ответ написан
    1 комментарий
  • Маппинг классов?

    serso
    @serso
    На сколько я понимаю проблему — вам достаточно одной аннотации, типа:
    public @interface ClassReference {
    	Class<?>[] values();
    }


    Тогда можно связать один класс с N классами:
    1. Если в values указан 1 класс и у этого класса стоит «обратная» аннотация на этот класс — 1 к 1
    2. Если в values указано N классов и у них у всех «обратная» аннотация на этот класс — 1 к N
    3. Если в values указано N классов и у них в свою очередь указаны связки к другим классам — N к M

    PS Если это не решение, то уточните вопрос.
    Ответ написан
  • Как хранить общие данные в Spring?

    serso
    @serso
    Нет, не нормально (да и вообще в Spring'e хранить что-то статично — верх безумия — с его-то Dependency Injection).

    То что вы делаете называется кешированием данных. Оно бывает разное в зависимости от целей, в вашем случае оно на уровне приложения (т.е. один инстанс кеша на всё приложение). На сколько я помню в Spring'e есть механизм объявления бина (bean), при этом есть возможность задать его область видимости (scope). Так вот ваш случай — singleton или (если есть конечно) application bean.

    По поводу многопоточности — естественная проблема общих ресурсов. Тут, к сожалению, и Spring вам не поможет — нужно реализовывать самому используя конструкцию synchronized.
    Ответ написан
    Комментировать
  • Какой объем знаний должен быть у Senior Java Developer

    serso
    @serso
    Мы недавно рассуждали об абстрактном Senior Developer'е и пришли к решению, что Senior (в отличие от Junior) — это тот, кто может может решить поставленную программистскую задачу самостоятельно. Соответственно, Java EE Senior Developer — это разработчик, который самостоятельно может решить задачу, которая связана с разработкой Enterprise приложения.

    Конечно есть синтетические тесты для «выявления» Senior'а, но мне кажется, что это всё ерунда — главное решение реальных практических задач.
    Ответ написан
    3 комментария