Как использовать ViewModel, когда Model имеет свойства JavaFX? - PullRequest
0 голосов
/ 17 марта 2019

Здесь сказано, что у нас есть 2 варианта реализации MVVM с JavaFX - это зависит от того, хотим ли мы использовать JavaFX-свойства в нашей модели или нет.

Как я понимаю, еслимоя модель не имеет свойств javafx, тогда я добавляю свойства fx во ViewModel.Тем не менее, я не могу понять, что я должен делать, если моя модель имеет свойства FX.Что мне делать в этом случае?Примерно так:

class ViewModel {
   private ObjectProperty<Person> personProperty = new SimpleObjectProperty<>();
   ...
   personProperty.set(person);
}

или мне нужно продублировать все свойства Person в ViewModel и связать каждое свойство ViewModel со свойствами Person, чтобы получить View -><- ViewModel -><- Model?Кто-нибудь может объяснить, что делать в этом случае?

1 Ответ

1 голос
/ 25 марта 2019

Существует 2 решения со своими преимуществами и недостатками.

Если вы хотите оставаться на 100% верным шаблону MVVM, ваш View может не знать никаких классов моделей. Поэтому нельзя передавать personProperty из ViewModel в View. Вместо этого вы должны продублировать поля класса модели как свойства в ViewModel, например «firstnameProperty». Эти свойства теперь можно использовать (обычно с помощью привязки данных) в представлении. View ничего не знает о модельном классе «Person». Вместо этого он знает только те свойства, которые предоставляет ViewModel.
Однако теперь вы должны синхронизировать эти свойства с фактическим экземпляром модели во ViewModel. Чтобы упростить это некоторое время назад, я создал ModelWrapper util как часть инфраструктуры mvvmFX. В дополнение к классическим Java POJO он также поддерживает классы со свойствами JavaFX. Вы можете увидеть пример использования в тестах класса здесь . Он использует класс Model со свойствами JavaFX ( здесь ). Это рекомендуемый подход. Однако, в зависимости от сложности классов вашей модели, это может быть сложно. Для сложных моделей с глубокой структурой вам может потребоваться написать собственную логику, чтобы синхронизировать свойства с вашими классами моделей. Это одна из самых сложных частей шаблона MVVM.

Другой подход состоит в том, чтобы ослабить ограничения шаблона MVVM и передать экземпляр модели в представление. Это может быть решением, если в вашем классе Model много полей и много кода будет дублировать каждое поле в ViewModel. Тем не менее, таким образом вы вводите зависимость от вашего View в вашу модель, что опять-таки является идеей MVVM.

...