Спустя почти 7 лет этот вопрос остается в силе, как и раньше.
По моему мнению, javafx никогда не должен импортироваться ни одним из классов, принадлежащих модели. Однако они могут работать очень хорошо, если вы используете MVVM в сочетании с архитектурой MVC. В этом смысле
- сущности = (доменная) модель ( M )
- FXML файлы = вид ( V )
- контроллер по-прежнему контроллер ( С )
- модель представления ( VM ) = новый набор классов данных, которые содержат только свойства javafx и ссылку на фактический объект домена (M), который он представляет. Далее он может передавать вызовы методов бизнес-логики этому объекту, выступая в качестве составного / декоратора.
Другой способ увидеть вещи - представить класс контроллера как часть представления, поскольку все, что он делает, - это связывает модель представления с представлением (данные и действия). Так что это можно легко назвать предъявителем или даже связывателем. Однако это зависит от того, как вы используете контроллер. Если вы добавите логику для манипулирования моделью представления в классе Controller, то она заслуживает своего имени, и у вас есть архитектура, представленная выше. Если класс контроллера привязывает только данные модели к элементам пользовательского интерфейса и ActionEvents к методам модели, то вы, как правило, имеете мутантную архитектуру MVVM, представленную ниже.
Я думаю, что эти архитектуры как-то соответствуют идеям дяди Боба о чистой архитектуре (уровень представления).