Должен ли я использовать Java для пользовательского компонента Swing, разработанного для приложения clojure?
Мне нужен простой компонент временной шкалы (например, в программном обеспечении для редактирования видео) для приложения clojure/seesaw, и мне интересно, насколько это хороший подход, чтобы реализовать это непосредственно с помощью clojure и seesaw, или мне следует написать его в java и создать оболочку clojure вокруг него.
Или в более общем плане: является ли функциональный язык программирования оптимальным для написания виджетов пользовательского интерфейса? Я не могу себе представить, чтобы сделать это без большого участия государства. И не был ли ОО изобретен для разработки UI?
3 ответа
Вы могли бы пойти в любую сторону. На Overtone мы создали ряд пользовательских графических компонентов непосредственно в Clojure с помощью Seesaw. Много раз, атом и (seesaw.core/canvas)
достаточно для такого рода вещей.
В зависимости от того, насколько вы хотите, одна из причин сделать это в Clojure - вы можете расширить протоколы Seesaw (выбор, привязка и т. Д.) Для нового виджета, чтобы он без проблем работал с Seesaw. Другое соображение заключается в том, должен ли ваш виджет использовать данные Clojure из других частей приложения. Это будет намного чище от Clojure, чем Java.
Тем не менее, если вы знакомы с Swing/Java, вы можете сделать это там, и Seesaw будет очень рад работать с пользовательским виджетом, встроенным в Java. Удачи!
FP хорош для программирования UI, но для этого базовая структура UI должна также основываться на концепциях FP, таких как FRP и т. Д. В вашем случае базовая структура UI (Swing) основана на OO, и, следовательно, было бы проще реализовать ее в Java но вы все еще можете сделать это в качелях.
При прочих равных условиях (т. Е. При условии, что вы знаете и Clojure, и Java), я, вероятно, написал бы это как пользовательский компонент Swing в Java.
Причины:
- Swing по своей сути является основанной на Java средой ООП и лучше подходит для Java с точки зрения парадигмы.
- Изменяемое состояние легче в Java, чем в Clojure
- Если вы пишете это на Java, вы можете использовать его в другом месте более легко (например, как библиотека из другого кода Java)
- Компонент Swing легко обернуть в Clojure после того, как вы его создали
Конечно, для самой логики приложения я бы предпочел Clojure.