Связывание данных пользовательского интерфейса в Java - больше проблем, чем оно того стоит? - PullRequest
14 голосов
/ 05 мая 2011

Недавно я провел некоторое время, изучая и пытаясь использовать различные инструменты привязки данных Java, такие как JGoodies, GlazedLists, JSR-295 и т. Д. Проблемы, которые я пытался решить, не , которые сложно, однако объем кода, который мне пришлось написать для поддержки процесса связывания, значительно превышает любые упрощения, которые он обеспечивает.

Я обнаружил, что предоставленные инструменты не пригодны ни для чего, кроме тривиальной композиции и расширения (в частности, GlazedLists предоставляет большой набор инструментов, но слишком сложна для расширения системы).

Мне действительно нравится идея связывания данных, однако, похоже, она глубоко ошибочна. Я что-то упустил?

Ответы [ 2 ]

6 голосов
/ 01 июня 2012

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

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

Но за последние три года меньше программистов в проектах, над которыми я работал, действительно сталкивались с проблемами. И поэтому я склонен сказать, что связывание больше не такая большая проблема.

4 голосов
/ 05 мая 2011

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

Если ваше приложение достигло прогресса в течение нескольких человеко-месяцев, введение связывания после факта причинит некоторую боль. То же самое верно для почти всех (полезных) технологий. Большая часть боли может исходить от беспорядка, который вы считали само собой разумеющимся.

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

  • вы можете протестировать вашу презентационную модель (материал, с которым вы связываете свои компоненты) без размаха, без EDT, просто с простыми модульными тестами.
  • вы можете проверить связывание с помощью простого теста, включающего очень мало компонентов Swing

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

Хотя существует ИМХО серьезная проблема с привязкой в ​​мире Java. Это заставляет вас писать getters + setter с PropertyChangeSupport, который утомителен и подвержен ошибкам. Я не вижу реалистичного способа исправить это в Java, но другие языки (например, Scala) предлагают здесь интересные возможности. Смотрите мой последний пост в блоге, если вы заинтересованы: http://blog.schauderhaft.de/2011/05/01/binding-scala-objects-to-swing-components/

...