Гость
Map
Форумы / Java [игнор отключен] [закрыт для гостей] / Java/Kotlin серверный React / 25 сообщений из 46, страница 1 из 2
04.08.2020, 14:51
    #39986403
private
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Java/Kotlin серверный React
Классический способ написания UI как Swing и т.п. - это MVC где есть 2 типа функций рендеринга - 1) функция которая рендерит начальное состояние UI 2) множество функций обновления UI, которые по реакции на события и обновления модели обновляют UI

Так работали наверно 95% всех UI фреймворков во всех языках программирования и 100% в JS.

Когда вышел React он произвел революцию, поскольку он не требует создания обработчиков 2го типа, и делает это все сам автоматически (благодаря Reconciliation). С реактом можно выкинуть из проекта большую часть самого сложного кода - всю эту кучу методов которые слушают состояние модели и обновляют UI, и которые раньше надо было писать вручную. В реакте на любое событие - весь UI рендерится с нуля, затем риакт сравнивает старый и новый UI и САМ определяет как изменить старый UI чтобы он стал новым.

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

Итак - Риакт произвел революцию убрав кучу тупого обезьяньего кода. Далее добавились Angular, Vue и Svelte. Они тоже (условно конечно)работают примерно также и убирают необходимость писать тупой обезьяний код.

Тем не менее - Реакт не решает второй огромной проблемы - распределенной системы. Поскольку в отличии от скажем PHP или Сервлетов где вся логика на сервере, с Риактом теперь она у нас размазана по Серверу и Браузеру, и нам надо дублировать модели, создавать АПИ и коммуникацию между сервером и клиентом иметь разные валидации на клиенте и сервер. Опять приходится поддерживать кучу тупого обеьзяньего кода.

И тут появился Elixir Phoenix LiveView - по словам создателя сделал он его совершенно случайно, подумав а что если переместить код реакта на сервер. Переместить весь клиентский код на риакте из Браузера на сервер, а события (как нажатие клавиши) сериализовать и передавать на сервер по вебсокету, и расчет реакта (работающего на сервере) об изменении HTML DOM также сериализовать и отправлять в браузер. Соответственно браузер превращается во что-то типа Терминала или Удаленного Стола. Клиентское приложение на риакте в реальности работает на сервере (стейтфул), там-же на сервере рендерится ХТМЛ, а в браузер просто посылается его копия. Т.е. ни кода ни логики в браузере почти нету.

(Не путать с server-side react rendering, progressive rendering, enchancement и т.п. - это не имеет ничего общего с этим подходом и нужно для ускорения открытия страницы и загрузки риакта, там риакт рендерится на сервере только для загрузки а затем запускается на браузер и работает дальше как обычный риакт, в то время как Elixir Phoenix LiveView - риакт вообще никогда в браузер не загружает).


Как оказалось подход работает неожиданно хорошо https://dockyard.com/blog/2018/12/12/phoenix-liveview-interactive-real-time-apps-no-need-to-write-javascript (там тоже ряд оптимизаций кому интересно посмотрите на ютубе презентацию где детально рассказывается как все работает)

Нахрена все это нужно? Потому-что убирается распределенная система, выкидывается больше половины кода, поскольку больше нет раделения на клиентский и серверный код, нет проблемы N+1 запросов, не нужно АПИ и т.п.

Короче вопрос - что из этого есть в Java / Kotlin

П.С.

Не упоминать GWT, Vaadin, kweb, Wicket, teavm и т.п.

Должно быть 2 веши

1) Декларативный рендеринг, без необходимости писать вручную как изменять UI на реакцию на события
2) Фреймворк должен работать на сервере, не на клиенте
3) (думаю само собой понятно, но все-же) Это не Servlet, Spring, JSP, JSF и т.п.
...
Рейтинг: 0 / 0
04.08.2020, 14:59
    #39986408
private
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Java/Kotlin серверный React
Просьба не отвлекаться от дискуссии вопросами о производительности, задержки по сети и нагрузке на сервер при таком подходе, эти проблемы существуют, но если их интересно обсудить - лучше создать отдельный топик, не в этом.
...
Рейтинг: 0 / 0
04.08.2020, 15:12
    #39986412
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Java/Kotlin серверный React
Нифига не понял.

Но например Oracle ADF - все программируется на сервере, JavaScript вообще не нужен, он под капотом контролов спрятан.
Подозреваю остальные Java Server Face фраймворки примерно так же.
...
Рейтинг: 0 / 0
04.08.2020, 15:29
    #39986426
private
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Java/Kotlin серверный React
Это классический MVC (контроллера для простоты), есть модель - счетчик, метод который рендерит страницу, и метод который обновляет страницу когда меняется модель. Так работает Swing, и все старые JS фреймворки до реакта.

Код: java
1.
2.
3.
val count = 1
fun render (count: Int): String = "<body>${count}</body>"
fun on_change (count: Int): String = document.body.innerHtml = count


А вот так будет выглядеть код на Риакте (реакт имеется ввиду концепция, не фреймворк React.JS).
Кусок обезьяньего кода выкинули on_change, но работать будет все так-же интерактивно как и раньше. Потому-что риакт сам знает когда нужно выполнить код обновления UI и сделает этот вызов "document.body.innerHtml = count" автоматом.

Код: java
1.
2.
val count = 1
fun render (count: Int): String = "<body>${count}</body>"


А Elixir Phoenix LiveView или серверный реакт - это когда все это запущено на сервере, на JVM с Java/Kotlin но при этом показывется в браузере и работает так-же интерактивно и быстро, словно это клиентское приложение сделанное на риакте.

Серверный риакт - это как браузер который запущен на сервере (на самом деле только умный алгоритм рассчета изменений дерева компонентов), все вычисления и UI крутится внутри сервера, а в реальный браузер транслируется просто копия его текущего HtML, типа как удаленный рабочий стол, или старые десктопы-терминалы на майнфреймах.
...
Рейтинг: 0 / 0
04.08.2020, 15:30
    #39986427
private
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Java/Kotlin серверный React
(контроллера для простоты убран)
...
Рейтинг: 0 / 0
04.08.2020, 15:37
    #39986430
private
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Java/Kotlin серверный React
авторНо например Oracle ADF - все программируется на сервере, JavaScript вообще не нужен, он под капотом контролов спрятан.
Подозреваю остальные Java Server Face фраймворки примерно так же.

Там нужно вручную писать код - как менять UI в ответ на события. Это старые фреймворки. Собственно "react" называется так из-за реактивности - словно там есть магия когда изменения модели автоматически, реактивно, сами по себе меняют интерфейс. Как в Excell - ты изменил код в одной ячейке - и в других зависимых ячейках все автоматом поменялось. Реакт делает то-же самое для интерфейса, обновляет его автоматически.

А в фреймворках предыдущего поколения - Java Server Face и еще сотен других - это все надо писать вручную.
...
Рейтинг: 0 / 0
04.08.2020, 15:47
    #39986433
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Java/Kotlin серверный React
private
авторНо например Oracle ADF - все программируется на сервере, JavaScript вообще не нужен, он под капотом контролов спрятан.
Подозреваю остальные Java Server Face фраймворки примерно так же.

Там нужно вручную писать код - как менять UI в ответ на события. Это старые фреймворки. Собственно "react" называется так из-за реактивности - словно там есть магия когда изменения модели автоматически, реактивно, сами по себе меняют интерфейс. Как в Excell - ты изменил код в одной ячейке - и в других зависимых ячейках все автоматом поменялось. Реакт делает то-же самое для интерфейса, обновляет его автоматически.

А в фреймворках предыдущего поколения - Java Server Face и еще сотен других - это все надо писать вручную.

В Oracle ADF можно вообще код не писать. Компоненты на экране (описание в XML) сами рендерятся и отображают данные (из базы). Ну и само по себе ничего не бывает ))).

Вполне есть компоненты, которые в онлайн режиме умеют data pump с сервера приложений (базы) делать (например графики/индикаторы в реальном режиме времени для BI или Business Process Analysis), но я с ними детально не разбирался (использовал для индикации метрик, кинул на экран они и заработали)
...
Рейтинг: 0 / 0
04.08.2020, 16:01
    #39986438
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Java/Kotlin серверный React
Очередное изобретение колеса

1) функция которая рендерит начальное состояние UI

Нормальные Framework'и все же работают как компоненты (JSF). Положил компонент, он что-то отображет. Собирать HTML руками.... что же это за фраймворк такой (((

2) множество функций обновления UI, которые по реакции на события и обновления модели обновляют UI

Что значит "обновления модели обновляют UI" мне не понятно. Есть у меня данные в базе, их поменяли с другого компьютера, кто и что должен обновлять и зачем?

Обычно изменение UI происходят по причине изменения состояния со стороны пользователя.

Например пользователь очистил какое-то поле, другие поля нужно задизайблить.

Ну да, это нужно кодировать. Зависимым контролам нужно свойства Enabled менять с True на False и наоборот. Можно на Java, можно формулами (в ADF можно без Java, просто в свойство Enabled написать формулу ссылающуюся на какие-то данные, но мы старались делать на Java - нам так было понятнее).

А в фреймворках предыдущего поколения - Java Server Face и еще сотен других - это все надо писать вручную.
Какое-то жуткое лукавство.
...
Рейтинг: 0 / 0
04.08.2020, 16:07
    #39986440
забыл ник
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Java/Kotlin серверный React
Leonid Kudryavtsev
Очередное изобретение колеса

1) функция которая рендерит начальное состояние UI

Нормальные Framework'и все же работают как компоненты (JSF). Положил компонент, он что-то отображет. Собирать HTML руками.... что же это за фраймворк такой (((

2) множество функций обновления UI, которые по реакции на события и обновления модели обновляют UI

Что значит "обновления модели обновляют UI" мне не понятно. Есть у меня данные в базе, их поменяли с другого компьютера, кто и что должен обновлять и зачем?

Обычно изменение UI происходят по причине изменения состояния со стороны пользователя.

Например пользователь очистил какое-то поле, другие поля нужно задизайблить.

Ну да, это нужно кодировать. Зависимым контролам нужно свойства Enabled менять с True на False и наоборот. Можно на Java, можно формулами (в ADF можно без Java, просто в свойство Enabled написать формулу ссылающуюся на какие-то данные, но мы старались делать на Java - нам так было понятнее).

А в фреймворках предыдущего поколения - Java Server Face и еще сотен других - это все надо писать вручную.
Какое-то жуткое лукавство.

Совсем с react не знаком?
...
Рейтинг: 0 / 0
04.08.2020, 16:12
    #39986443
private
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Java/Kotlin серверный React
Мы уходим от дискуссии, как работает риакт я описал, кто не знаком с риактом и если интересны детали - они есть на официальном сайте реакта.
...
Рейтинг: 0 / 0
04.08.2020, 16:14
    #39986444
забыл ник
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Java/Kotlin серверный React
Что касается серверного реакта - то (на мой взгляд) идея полнейшее дерьмо. Помимо того что возникают очевидные проблемы с производительностью, то еще теряется преимущество адаптации контента под другие платформы. Что если я хочу использовать тот же бэкэнд для мобильного приложения и веб-приложения? Терминала, умных часов или телевизора? На кой вообще этот html.

А вот react на клиентской стороне - вполне жизнеспособен, не совсем понял описанных проблем с ним. То что модель дублируется, это все?

Не знаю как в котлинах и java, а например на скала можно использовать обычную скалу на сервере и scalaJS на клиенте, и модель будет правиться только в одном shared модуле. Кстати scalaJS имеет поддержку react, только он к тому же еще и становится типизированным. Я не делал production-ready проектов на этой связке и лично мое мнение что там еще конечно сыровато, но вполне себе вариант. Я давно не получал такого кайфа от кодинга веб-приложения(для собственных нужд), когда фронт-энд типизированный на том же языке, что и бэкэнд и это не ублюдочный яваскрипт.
...
Рейтинг: 0 / 0
04.08.2020, 16:37
    #39986450
private
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Java/Kotlin серверный React
Хорош подход или нет - зависит от задачи, понятно что если приложение посещают десятки миллионов и бабло льется рекой - нужно делать нативно.

Но если это скажем заказные проекты, сокращение кода раза в 3 - и соотв. сроков, усилий и затрат - это хороший вариант.

Про варианты с Kotlin в браузере да есть варианты, но вопрос в том как полностью убрать код на клиенте .
...
Рейтинг: 0 / 0
04.08.2020, 16:50
    #39986456
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Java/Kotlin серверный React
забыл ник

Совсем с react не знаком?

Знаком, делал с его помощью админку года 4-и назад. Только смысл сравнивать теплое и мягкое?
JavaScript с клиентским HTML DOM'ом и, например, более-менее нормальные framework'и

ну и, то, что в более-менее нормальных фреймворках для рендеринга нужно писать какой-то код - лукавство.

Что MS Access, что Oracle Forms, что Oracle ADF - положил компонент, как он рендерится, дело исключительно фраймворка.

Ну сделали нечто __похожее__ на client react на стороне серверу - ну молодцы. Еще одним сайтом с гордой вывеской "мы изобрели новый, самый лучший и молодежный фраймворк" стало больше. На деле, все по отдельности уже было лет 15-20 назад

Например с их сайта:
We’ve heard for years that server-rendered HTML is a thing of the past for rich applications, and besides, how fast can an application be if it has to render the entire template on the server on every change?
Жуткое лукавство.

then only the dynamic parts that have changed on update
Что древний Oracle OAF, что Oracle ADF - ровно так же посылают только изменения.

По скорости - проблема со скоростью в Java EE не рендеринг, а жуткое потребление памяти и тормоза на бинах IMHO

powered applications are stateful on the server with bidrectional communication via WebSockets
Опять таки не новость. Такие библиотеки существуют уже лет 10-15
Если я не ошибаюсь (сам не работал, только доки просматривал)
https://ru.wikipedia.org/wiki/ADempiere
https://ru.wikipedia.org/wiki/ZK

IMHO & AFAIK

p.s. Называть фремворком нечто, заточенное исключительно под рисование HTML.... б№;%... 2020 год (((
...
Рейтинг: 0 / 0
04.08.2020, 17:36
    #39986478
PetroNotC Sharp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Java/Kotlin серверный React
private,
Бэк и фронт в одно целое это писать против ветра.
Пример - конвейер = разделение труда.
...
Рейтинг: 0 / 0
04.08.2020, 17:48
    #39986483
private
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Java/Kotlin серверный React
В ZK-фреймворк нет клиентской части (то что нужно), но в ZK-фреймворке нет реактивности.

Изменение UI происходит императивно, за счет прямых манипуляций с компонентами интерфейса, вот кусок кода из его примера, это классический MVC, Swing UI и еще наверно десятка таких-же.

Код: java
1.
2.
3.
4.
5.
6.
7.
...
button.addEventListener("onClick", new EventListener() {
  public void onEvent(Event event) throws Exception {
    Messagebox.show(System.getProperty(input.getValue())); // <= императивное изменение состояния компонента
  }
});
...



Вот собственно с википедии страницы ZK-фреймворк и указывается что это событийный-компонентный фреймворк.

автор... создавать полноценные пользовательские интерфейсы для веб-приложений без применения JavaScript, в событийно-ориентированной парадигме и компонентной модели ...

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

В предыдущих постах вы привели 2 вещи, каждая из которых содержит только 1 част из 2х:

- (присутствует клиент) react-подобный клиентский фреймворк, где пишешь на котлине и потом все это генерируется в JS, они реактивные, но там есть сложности с распредленной системой, там есть разделение на браузер и сервер.
- (отсутствует реактивность) ZK-фреймворк - все делается на сервере, клиента нет, но нет реактивности.

Мне нужно чтобы было и то и другое (как например в Elixir Phoenix LiveView) :).
...
Рейтинг: 0 / 0
04.08.2020, 17:53
    #39986488
private
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Java/Kotlin серверный React
То что есть палитра готовых компонентов в ZK и Oracle ADF - это безусловно хорошая вешь, большое улучшение по сравнению с чистым HTML и JS, с ними работать гораздо легче, как десктопное приложение в Дельфи получается .

Но реактивность - это другой уровень, это еще лучше.
...
Рейтинг: 0 / 0
04.08.2020, 17:55
    #39986489
private
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Java/Kotlin серверный React
Реактивность работает точно также с такими-же палитрами готовых компонентов, там тоже не нужно писать базового HTML, примеры с HTML на риакте - просто чтобы просто было и понятно о чем реч. В реальности в react.js никто не пишет HTML, берется готовая или делается с нуля палитра компонентов - точно такая-же как oracle adf - и точно-также быстро из готовых блоков строится. Только оно еще ко всему прочему и реактивное.
...
Рейтинг: 0 / 0
04.08.2020, 18:01
    #39986491
private
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Java/Kotlin серверный React
Короче, нужна реактивность на сервере. А не реактивность только на клиенте (с JS подобными клиентскими Kotlin фреймворками), или на сервере но только событийность, без реактивности (ZK, Oracle ADF).
...
Рейтинг: 0 / 0
04.08.2020, 18:04
    #39986493
PetroNotC Sharp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Java/Kotlin серверный React
private,
Понятие реактивность на бэке не совпадает с этим же словом на фронте.
...
Рейтинг: 0 / 0
04.08.2020, 18:09
    #39986494
private
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Java/Kotlin серверный React
К слову - React - это не веб-фреймворк, понятно что основная движуха идет в вебе, и 90% проектов это хтмл и жаваскрипт. Но вообще это абстрактный алгоритм обновления компонентного дерева в соответствии с заданной моделью. Он работает где угодно, начиная от веба и заканчивая swing, мобильными нативными деревьями компонентов и т.п. на любых языках и с любыми компонентами.

Собственно то что отсутствует в ZK фреймворке - этот самый алгоритм - который автоматически обновляет компонентное дерево в соответствии с изменившейся моделью.
...
Рейтинг: 0 / 0
04.08.2020, 18:11
    #39986495
private
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Java/Kotlin серверный React
реактивность точнее, фреймворк - react.js это реализация этой идеи и алгоритма для хтмл и жаваскрипта.
...
Рейтинг: 0 / 0
04.08.2020, 18:16
    #39986497
private
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Java/Kotlin серверный React
Но вообще наверно прийдется умерить желания и поближе посмотреть на компонентные фреймворки ZK и Vaadin.
...
Рейтинг: 0 / 0
04.08.2020, 18:18
    #39986499
private
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Java/Kotlin серверный React
Вообще в ZK и Vaadin уже есть 90% того что нужно, нет только самого алгоритма сравнения соответствия дерева интерфейса с моделью.
Сам то он простой, но вот чтобы он эффективно работал нужна возможность быстрого сравнения обьектов.
А это можно сделать только если они иммутабельные. Соотв такой алгоритм в ZK и Vaadin потребует использования иммутабельных структур данных в моделях. И у них видимо часть пользователей к этому не готова и не обрадуется, возможно поэтому и не делают.
...
Рейтинг: 0 / 0
04.08.2020, 18:48
    #39986502
PetroNotC Sharp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Java/Kotlin серверный React
private,

- react js это либа для рендеринга. Как шаблоны. Всё
- реактивное программирование это стримы
Как тебя торкнуло что ты смешал одно с другим?
Понятно что в шаблонах нет состояния. Нет событий. Это хорошо?
...
Рейтинг: 0 / 0
04.08.2020, 18:49
    #39986503
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Java/Kotlin серверный React
Под спойлером, т.к. все это уже писал Выше

Я не очень понимаю, чем ADF (JSF) не реактивные

1. Создаем Business Object VO_Users на таблицу Users
2. На Page кладем Table связываем с VO_Users
Можно вообще код не писать. Нужен только автогенеренный BO, для Page вроде код вообще не обязателен (могу ошибаться).

Если нужна реактивность: говорим VO_Users.executeQuery - данные появляются, меняем данные в VO_Users - данные меняются.... куда уж больше

В общем, Ваш "классический способ написания" я вообще не понимаю. Вот пишу я сейчас на Oracle Forms ))), оно конечно не Java, но у меня ВООБЩЕ НЕТ "функций рендеринга". Делал приложения на Oracle ADF - аналогично. Методы рендеринга конечно есть... но это такие дебри и потроха фреймворка, что нормальные люди туда вообще не лезут.

Классический способ написания UI как Swing и т.п. - это MVC где есть 2 типа функций рендеринга - 1) функция которая рендерит начальное состояние UI 2) множество функций обновления UI, которые по реакции на события и обновления модели обновляют UI


Мне это напоминает приложение моих коллег на QT. Где на каждый change text-item'а в каждом text-item'е написано
UPDATE table SET field = :value
в Вашем описание очень похоже, только "наоборот" ))). Но, извините, это совершенно НЕ "классический способ написания UI"

IMHO & AFAIK


Если же говорить про определение Реактивное программирование из Вики, то нафига это через задний проход ташить в классический ООП язык типа Java. Понятно, что на скриптовом языке такие зависимости значительно проще, понятнее и логичнее описываются. В Java же это будет требовать 100500 абстракций одна поверх другой.
абстракция Listener - реактивность по Java'вски. И что? удобно? сколько будет кода если ее в каждый объект пихать.

В реальности в react.js никто не пишет HTML, берется готовая или делается с нуля палитра компонентов
1. Сомневаюсь. что готовые палитры компонентов запустятся на рекламируемом Вами server side react'е
2. делается с нуля - ну и где профит от "модно-молодежно"?
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Java/Kotlin серверный React / 25 сообщений из 46, страница 1 из 2
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]