Чем больше Reactive лучше? - PullRequest
       54

Чем больше Reactive лучше?

0 голосов
/ 13 февраля 2020

Учитывая метод, я могу написать реактивный код двумя способами:

public String getString() { return "Hello, World"; }

или

public Mono<String> getMonoString() { return Mono.just("Hello, World"); }

, а затем использовать его с

someOtherPublisher.map( value-> getString() + value ).subscribe(System.out::println);

или

someOtherPublisher.flatMap( value-> getMonoString().map(str-> str + value ) ).subscribe(System.out::println);

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

Мне интересно найти какой-то авторитет в отношении того, почему один лучше или хуже другого или даже имеет ли это значение.

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

1 Ответ

2 голосов
/ 13 февраля 2020

прежде всего.

public String getString() { return "Hello, World"; }

это не реактивно. Это стандартная императивная функция с 0 (1) временной сложностью. Таким образом, при n количестве запусков это будет примерно одинаковым.

Это реактивно:

public Mono<String> getMonoString() { return Mono.just("Hello, World"); }

Но это также имеет 0 (1) временную сложность. Это означает, что есть вероятность, что он будет переключать потоки в середине этого, но вероятность очень маловероятна. При n количестве запусков это также будет примерно одинаковым.

Ни один из ваших примеров не имеет значения, потому что ни один из них на самом деле не занимает времени.

Когда реактивные сияния - это когда имеешь дело с побочными эффектами. Вещи, которые требуют времени , такие как вызовы базы данных, вызовы http, File I / O и т. Д. c. et c.

Реактивен хорошо, когда потокам нужно ждать.

...