2009-04-07 4 views
0

Общая структура данной программной системы - это контроллер модели. Вид (графический интерфейс) представляет собой представление модели (предметные модели домена).Модель Просмотр синхронизации (или избежание синхронизации)

Однако в представлении (графическом интерфейсе) есть компоненты (такие как JTextComponent). Эти компоненты также расположены в контроллере модели. В качестве модели JTextComponent использует Document.

JTextComponent предназначен для представления определенной части объектной модели домена. Но его модель на самом деле является объектом Document.

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

Есть ли элегантные решения для привязки JTextComponent (или любого графического компонента) к части объектной модели домена, так что действительно есть одно место для данных?

ответ

1

Здесь есть несколько вещей.

Структура Java предлагает вам приятный способ обновить ваш интерфейс, но сдерживает использование определенной структуры Document.

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

Структура Java Document обеспечивает возможность прослушивания изменений, которые вы можете использовать для создания Adapter class между вашей моделью и документом. В основном при настройке формы вы создадите экземпляр класса адаптера. Вы будете инициализировать свою модель. У адаптера будет свойство, возвращающее документ. Кроме того, адаптер будет регистрироваться как слушатель для этой модели документа. Адаптер будет достаточно умным, чтобы знать, как перевести шансы на модель документа на вашу модель.

идет что-то вроде этого

  1. UI создан вместе с JTextDocument.
  2. В процессе создания он запрашивает вашу модель из представления.
  3. Создает экземпляр адаптера , инициализируя его своей моделью.
  4. Адаптер также устанавливает слушатель документа.
  5. Назначьте документ объекту JTextDocument .
  6. Любое взаимодействие с документом является доложила Адаптер
  7. Адаптер Уведомляет представление проходящее переведенные данные обратно.
  8. View изменяет модель.
  9. View nofitifies the Adapter, который имеет значение.
  10. Адаптер переводит изменения в изменения в документе.

Поскольку адаптер привязан к Java Framework, его следует приближать как можно ближе к пользовательскому интерфейсу. Вероятно, Adapter будет реализовывать интерфейс, открытый View, так что View не должен ссылаться на что-либо конкретное для используемой структуры. Когда вы меняете фреймворк, все, что вам нужно сделать, это создать новый объект, который реализует этот интерфейс, и View не является более мудрым.

2

Сделайте объект Document самостоятельно, в вашей объектной модели.

Затем используйте setDocument(d) method.

+0

Или конструктор, который принимает документ. –

1

Если я правильно понимаю, вы сталкиваетесь с параллельной иерархией сдерживания.

enter code here 
        view -----------------------> Model 
        | 
        v 
       TextArea------------------------>Document 

И ваше беспокойство заключается в том, что данные в Модели также должны присутствовать в документе. Самый изящный способ решить эту проблему - вывести документ из самой модели, т. Е. Сделать Document в окне общей модели.

Я думаю, что Юваль предлагает одно и то же.

Смежные вопросы