|
Очень много CompletableFuture
|
|||
---|---|---|---|
#18+
На новом проекте встретил очень частое использование CompletableFuture. "Частое" это слабо сказано, почти сплошняком. Проект - типичный rest со spring внутри. CompletableFuture используется везде: в контроллерах, сервисах, репозиториях. Почти все методы возвращают или принимают CompletableFuture. Может это и нормально, но как-то непривычно. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.03.2020, 16:29 |
|
Очень много CompletableFuture
|
|||
---|---|---|---|
#18+
Уточнение. Почти все методы возвращают или принимают CompletableFuture/ ... |
|||
:
Нравится:
Не нравится:
|
|||
21.03.2020, 16:32 |
|
Очень много CompletableFuture
|
|||
---|---|---|---|
#18+
Или это какой-то новый стиль программирования и все что касается работы с ресурсами (базы, файлы и т.п.) нужно делать через CompletableFuture. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.03.2020, 16:47 |
|
Очень много CompletableFuture
|
|||
---|---|---|---|
#18+
bob1970 Или это какой-то новый стиль программирования и все что касается работы с ресурсами (базы, файлы и т.п.) нужно делать через CompletableFuture. Все правильно, это пародия на функциональное программирование, но увы из-за долгой истории java эти концепты не получается сделать красиво и на мой взгляд код становится просто п..ц ... |
|||
:
Нравится:
Не нравится:
|
|||
21.03.2020, 17:17 |
|
Очень много CompletableFuture
|
|||
---|---|---|---|
#18+
bob1970, Сабж служит для удобного асинхронного кодирования. Вопрос, нужна ли асинхронность при БАНАЛЬНОМ REST? Мое имхо - не нужна. Платформа java и контейнер аппСервера сделали все чтобы прогер не задумывался о потоках и асинхронности. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.03.2020, 18:48 |
|
Очень много CompletableFuture
|
|||
---|---|---|---|
#18+
PetroNotC Sharp bob1970, Сабж служит для удобного асинхронного кодирования. ... Видел бы ты это удобно. Мозг в трубочку сворачивается. Представь себе код, где обычные объекты практически не используются, все завернуто в CompletableFuture. Я не против CompletableFuture. Все правильно. И удобно, и производительность. Но где грань применимости? Понятно что при обращении к внешним медленным ресурсам, и тогда получается что правильно запросы к БД нужно делать через CompletableFuture. Как-то бы определить эту границу. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.03.2020, 19:26 |
|
Очень много CompletableFuture
|
|||
---|---|---|---|
#18+
bob1970 Все правильно. И удобно, и производительность. Но где грань применимости? Понятно что при обращении к внешним медленным ресурсам, и тогда получается что правильно запросы к БД нужно делать через CompletableFuture. Как-то бы определить эту границу. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.03.2020, 19:47 |
|
Очень много CompletableFuture
|
|||
---|---|---|---|
#18+
Андрей Панфилов, Удобно/неудобно. Размышляю пока. Почему выбрано такое решение. Вот пару ссылок: CompletableFuture : A new era of asynchronous programming Сама статья ниочем, но заголовок внушает. И другая Synchronous or asynchronous, and why wrestle with wrappers? Может и в самом деле ушла эра синхронного программирования. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.03.2020, 20:27 |
|
Очень много CompletableFuture
|
|||
---|---|---|---|
#18+
bob1970 Может и в самом деле ушла эра синхронного программирования. Вот для просветления: Чем асинхронные сервлеты отличаются от Sping WebFlux ... |
|||
:
Нравится:
Не нравится:
|
|||
21.03.2020, 20:55 |
|
Очень много CompletableFuture
|
|||
---|---|---|---|
#18+
bob1970, мы-же кода не видели. Вполне возможно что существует кейс когда асинхронные микро-задачки удобны. Как-по мне - не очень. Неудобно отслеживать статус ошибки. Если у тебя вся логика - короткая и отбивается одним методом рест-контроллера - тогда ручная CompletableFuture - не имеет смысла. Сам рест-контроллер и так обеспечивает множество конкурирующих сеансов. Чтобы понять что CompletableFuture являлся ненужным обвесом - надо взять полностью этот проект и переписать на классической rest архитектуре и просто посмотреть как оно вышло. Возможно кода станет меньше. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.03.2020, 20:58 |
|
Очень много CompletableFuture
|
|||
---|---|---|---|
#18+
mayton мы-же кода не видели. Там страшно. Очень. mayton Вполне возможно что существует кейс когда асинхронные микро-задачки удобны. Именно. Меня бы не смутили мелкие вставки, обращения к микро=задачкам. Но когда все. Сплошь. Маленький пример: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
Это базовый репозиторий. Как можно понять все остальные репо-ии наследуются. Сервисы , контроллеры в том же духе. Ну и можете представить implementation. mayton Чтобы понять что CompletableFuture являлся ненужным обвесом - надо взять полностью этот проект и переписать на классической rest архитектуре и просто посмотреть как оно вышло. Возможно кода станет меньше. Это нереально. Очень много кода. В общем-то тему, наверное, нужно переименовать в Реактивная Java и закрыть. А решать каждый для себя. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.03.2020, 21:25 |
|
Очень много CompletableFuture
|
|||
---|---|---|---|
#18+
bob1970, а как при таком контракте репозитория хоть какую-то бизнес-логику организовать (ну банально: записать информацию о транзакции и списать сумму со счета)? или там CRUD и ничего больше? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.03.2020, 21:33 |
|
Очень много CompletableFuture
|
|||
---|---|---|---|
#18+
bob1970 Видел бы ты это удобно. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.03.2020, 21:53 |
|
Очень много CompletableFuture
|
|||
---|---|---|---|
#18+
Если рассмотреть такой упрощенный круд-реп Код: java 1. 2. 3. 4.
И я допустим хочу с ним поработать. Я добавил документ entity. И вызываю сраз-же getItemReference. Код: java 1. 2.
И во второй строке я получаю ошибку или исключение. Мой фьючерс еще не завершил работу. Тоесть я видимо как-то не так работаю. Очевидно чтобы гарантировать что причинно-следственная цепочка отработала я должен ставить искусственный барьер на первый и второй фьючерс. И усложнять простой и очевидный код. И теперь вопрос. Ради чего это делалось? И ведь это даже не CQRS. В той методике есть хотя-бы темпоральная хронология в КОМАНДАХ. Команда которая дана раньше - раньше будет исполнена. Но только не здесь. Почему нельзя было просто сделать так? Код: java 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
21.03.2020, 21:56 |
|
Очень много CompletableFuture
|
|||
---|---|---|---|
#18+
Андрей Панфилов, Примерно так: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22.
И повторюсь -там не только CRUD. Там ВСЕ. Вообще ВСЕ. Сервисы с бизнес-логикой, контроллеры и прочий код. Все на future ... |
|||
:
Нравится:
Не нравится:
|
|||
21.03.2020, 21:58 |
|
Очень много CompletableFuture
|
|||
---|---|---|---|
#18+
PetroNotC Sharp, Сравни Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
и Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19.
Это отсюда ... |
|||
:
Нравится:
Не нравится:
|
|||
21.03.2020, 22:07 |
|
Очень много CompletableFuture
|
|||
---|---|---|---|
#18+
Как будто-бы калька с другого фреймворка. Может даже не на Java а на другом языке или технологии где такие штуки красиво заворачиваются в аспекты или лябды. Здесь как-бы мясо вот серединке Код: java 1. 2. 3.
А сверху и снизу просто одинаковые обёртки которые обеспечивают трансфер in/out параметров. Вот почему мне и напомнило аспекты. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.03.2020, 22:08 |
|
Очень много CompletableFuture
|
|||
---|---|---|---|
#18+
mayton, Да, это главное. Но как завернуто Код: java 1. 2. 3.
... |
|||
:
Нравится:
Не нравится:
|
|||
21.03.2020, 22:11 |
|
Очень много CompletableFuture
|
|||
---|---|---|---|
#18+
bob1970 Примерно так: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22.
... |
|||
:
Нравится:
Не нравится:
|
|||
21.03.2020, 22:11 |
|
Очень много CompletableFuture
|
|||
---|---|---|---|
#18+
Андрей Панфилов, Примерно так Код: java 1. 2. 3. 4. 5. 6. 7.
... |
|||
:
Нравится:
Не нравится:
|
|||
21.03.2020, 22:15 |
|
Очень много CompletableFuture
|
|||
---|---|---|---|
#18+
bob1970 Примерно так Код: java 1. 2. 3. 4. 5. 6. 7.
... |
|||
:
Нравится:
Не нравится:
|
|||
21.03.2020, 22:18 |
|
Очень много CompletableFuture
|
|||
---|---|---|---|
#18+
Андрей Панфилов А на ACID забить? Оххх... Там до таких страшных слов, как до Китая. А вообще, я не про конкретный проект. Я про подход. Реактивная Java есть и используется. И похоже использовать ее нужно как-то так. Короче, надо изучать это дело. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.03.2020, 22:24 |
|
Очень много CompletableFuture
|
|||
---|---|---|---|
#18+
mayton Почему нельзя было просто сделать так? Код: java 1. 2. 3. 4.
Это самый главный вопрос. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.03.2020, 22:32 |
|
Очень много CompletableFuture
|
|||
---|---|---|---|
#18+
bob1970 Или это какой-то новый стиль программирования и все что касается работы с ресурсами (базы, файлы и т.п.) нужно делать через CompletableFuture. ты прям плей фреймворк описал ))) в нем тоже все возвращает футуры. все что связано с взаимодействием со сторонними сервисами или ресурсами (бд, веб, акторы и тп) ... |
|||
:
Нравится:
Не нравится:
|
|||
22.03.2020, 00:31 |
|
Очень много CompletableFuture
|
|||
---|---|---|---|
#18+
bob1970 PetroNotC Sharp bob1970, Сабж служит для удобного асинхронного кодирования. ... Видел бы ты это удобно. Мозг в трубочку сворачивается. Представь себе код, где обычные объекты практически не используются, все завернуто в CompletableFuture. Я не против CompletableFuture. Все правильно. И удобно, и производительность. Но где грань применимости? Понятно что при обращении к внешним медленным ресурсам, и тогда получается что правильно запросы к БД нужно делать через CompletableFuture. Как-то бы определить эту границу. дело привычки. мозг перестает скручиваться в трубку если ты постоянно тащишь все через функторы монады (мап флатмап или зенкомпос зенаплай вроде). да. это асинхронка, но вот мне лично кажется, что в этих кишках ошибки ловить прям отдельный челлендж. особенно когда проблемы возникают с многопоточкой. а они возникают. кто говорит нет - тот обманывает. другая проблема. у джавы комплитабл фьюча выглядит как гамно. в скале лучше. в ней хоть форкомпрехеншн есть который отображает это не в таком идиотском виде. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.03.2020, 00:34 |
|
|
start [/forum/topic.php?fid=59&msg=39939923&tid=2120860]: |
0ms |
get settings: |
25ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
46ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
450ms |
get tp. blocked users: |
2ms |
others: | 306ms |
total: | 865ms |
0 / 0 |