Создание приложений Java Swing постоянными - PullRequest
5 голосов
/ 27 мая 2010

Я бы хотел добавить постоянство в свое приложение на основе Swing; и я впервые делаю что-то подобное.

Я знаю, как использовать API сериализации Java (хотя вместо этого я использую xstream), я знаю, что JComponent являются сериализуемыми, но меня интересуют более архитектурные соображения: как проектировать приложение, чтобы сделать его постоянным легко; и т.д.

Я был бы рад видеть любые источники с глубоким рассмотрением этих вопросов, хотя я также был бы рад услышать некоторые лучшие практики в явном виде:)

Ответы [ 2 ]

7 голосов
/ 27 мая 2010

Вы должны использовать подход модель-представление-контроллер . Вы только сериализуете модель, а не представление. Представление должно быть заполнено из модели. Сериализация компонентов Swing в любом случае не рекомендуется:

Хотя компоненты Swing реализуют интерфейс Serializable, они не переносимы между различными версиями виртуальной машины Java

Глядя на то, что у вас есть, у вас должно быть несколько классов, которые являются вашей моделью и содержат только данные. Эти классы будут где-нибудь сериализованы с использованием XStream. Затем у ваших классов Swing есть методы для получения этих классов моделей и заполнения полей и редакторов. Затем вы можете расширить пользовательский интерфейс, например, без необходимости изменения класса, добавления дополнительной функциональности или предоставления различных представлений для одного и того же набора данных.

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

Если XStream настроен правильно, и если вы внимательно относитесь к модели и полям, должна быть возможность добавить больше полей в классы вашей модели без нарушения обратной совместимости.

В любом случае я не рекомендую использовать сериализацию Java, так как не рекомендуется использовать ее для хранения. Сериализация Java выделяется при удаленном вызове метода. Это относительно хрупко, когда классы модели меняются ..

0 голосов
/ 27 мая 2010

И javadoc говорит (например, JComponent ): Начиная с версии 1.4, в пакет java.beans была добавлена ​​поддержка долговременного хранения всех JavaBeansTM. Пожалуйста, смотрите XMLEncoder.

См. XMLEncoder .

С архитектурной точки зрения эта сериализация лучше всего работает с bean-компонентами, коллекциями и понятием значения по умолчанию. В bean-компонентах сохраняются только bean-компоненты свойств, значение которых отличается от значения по умолчанию. (извините за мой английский)

Вы можете настроить это как хотите.

...