JavaFX предоставляет множество новых объектов Property, например, javafx.beans.property.DoubleProperty
которые позволяют вам определять поля, которые можно автоматически наблюдать и синхронизировать.
Во многих примерах JFX класс модели MVC имеет ряд этих полей свойств, которые затем могут автоматически привязываться к представлению.
Тем не менее, это, кажется, побуждает нас помещать свойства JFX в наши объекты Domain (если вы предполагаете, что класс Model будет объектом домена), что кажется мне плохим разделением проблем (то есть помещение кода GUI в Domain ).
Кто-нибудь видел, чтобы эта проблема решалась в «реальной жизни», и если да, то как это было сделано?
Ответы:
Я поигрался с JavaFX 2.0, который, как я полагаю, касается вашего вопроса. Не настоящий рабочий код, просто личный проект, но я столкнулся с той же проблемой, о которой вы упоминали выше. Вся модель имеет тенденцию становиться зависимой от 2D-структуры, и мне это не нравится.
То, что я сделал, я разделил каждый класс в модели на два: реальный класс модели, который имеет возможность загружать свое содержимое из базы данных, знает, как он изменяет свое состояние и т. Д. И т. Д. ... и класс представления, который определяет внешний вид. на экране. Последний будет содержать все классы Property.
Такой же дизайн вы найдете в любой среде MVC, например, в Swing. Просто здесь нет выхода из этого.
источник
Спустя почти 7 лет этот вопрос остается в силе, как и раньше.
По моему мнению, javafx никогда не должен импортироваться ни одним из классов, принадлежащих модели. Однако они могут работать очень хорошо, если вы используете MVVM в сочетании с архитектурой MVC. В этом смысле
Другой способ увидеть вещи - представить класс контроллера как часть представления, поскольку все, что он делает, - это связывает модель представления с представлением (данные и действия). Так что это можно легко назвать предъявителем или даже связывателем. Однако это зависит от того, как вы используете контроллер. Если вы добавите логику для манипулирования моделью представления в классе Controller, то она заслуживает своего имени, и у вас есть архитектура, представленная выше. Если класс контроллера привязывает только данные модели к элементам пользовательского интерфейса и ActionEvents к методам модели, то вы, как правило, имеете мутантную архитектуру MVVM, представленную ниже.
Я думаю, что эти архитектуры как-то соответствуют идеям дяди Боба о чистой архитектуре (уровень представления).
источник