Slide 1

Slide 1 text

Java: da orientação a objetos a aplicações web reativas Um Overview de pilares da POO, boas práticas e uma breve introdução à programação reativa com Java @kamilah_santos

Slide 2

Slide 2 text

Kamila Santos Backend Developer @kamilah_santos

Slide 3

Slide 3 text

Comunidades

Slide 4

Slide 4 text

Vale lembrar: @kamilah_santos

Slide 5

Slide 5 text

Pilares da orientação a objetos @kamilah_santos

Slide 6

Slide 6 text

Abstração @kamilah_santos precisamos imaginar o que esse objeto irá realizar dentro de nosso sistema

Slide 7

Slide 7 text

Abstração @kamilah_santos identidade ao objeto que vamos criar

Slide 8

Slide 8 text

Abstração @kamilah_santos Características desse objeto, as chamadas propriedades

Slide 9

Slide 9 text

Abstração @kamilah_santos Esse objeto será capaz de executar ações , que chamamos de métodos

Slide 10

Slide 10 text

Encapsulamento @kamilah_santos "protege/esconde" objetos do restante da aplicação, utilizamos getters e setters para definir e acessar esses valores

Slide 11

Slide 11 text

Polimorfismo @kamilah_santos Alteramos o funcionamento interno de um método herdado do objeto pai

Slide 12

Slide 12 text

Herança @kamilah_santos classe filha herda comportamentos da classe pai

Slide 13

Slide 13 text

S.O.L.I.D @kamilah_santos

Slide 14

Slide 14 text

SOLID @kamilah_santos Conjunto de boas práticas de desenvolvimento que facilitam a adição de novas features, manutenção e correção de bugs

Slide 15

Slide 15 text

S = Single responsibility principle - Prinípio da responsabilidade única @kamilah_santos Uma classe deve ter uma e somente uma responsabilidade, se tiver mais de uma devemos refatorar.

Slide 16

Slide 16 text

O = Open/closed principle - Princípio do Aberto/Fechado @kamilah_santos Devemos ser capazes de estender um comportamento de determinada classe sem precisar modificá-lo, pode ter seu comportamento alterado com facilidade se necessário porém através herança,interface….

Slide 17

Slide 17 text

L : Liskov substitution principle Princípio da substituição de Liskov @kamilah_santos As classes derivadas devem poder ser substituíveis pelas classes bases

Slide 18

Slide 18 text

I : Interface segregation principle - Princípio da segregação de interfaces @kamilah_santos Melhor ter várias interfaces específicas do que um interface geral, crie interfaces granulares para cada “cliente”

Slide 19

Slide 19 text

D: Dependency inversion principle - Princípio da inversão de dependência @kamilah_santos Dependa das abstrações, não das implementações, as abstrações tem menores alterações e facilitam a implementação.

Slide 20

Slide 20 text

Manifesto Reativo @kamilah_santos

Slide 21

Slide 21 text

https://www.reactivemanifesto.org/pt-BR @kamilah_santos

Slide 22

Slide 22 text

Responsivo O sistema responde em tempo hábil, se possível @kamilah_santos

Slide 23

Slide 23 text

Resiliente O sistema permanece responsivo diante de falhas @kamilah_santos

Slide 24

Slide 24 text

Elástico O sistema permanece responsivo diante de uma carga de trabalho variável. @kamilah_santos

Slide 25

Slide 25 text

MESSAGE DRIVEN Aplicações reativas dependem da passagem de mensagens assíncronas para estabelecer um limite entre os componentes, garantindo um acoplamento flexível , isolamento e transparência @kamilah_santos

Slide 26

Slide 26 text

Maior uso das features funcionais/reativas do java @kamilah_santos

Slide 27

Slide 27 text

@kamilah_santos

Slide 28

Slide 28 text

@kamilah_santos

Slide 29

Slide 29 text

@kamilah_santos

Slide 30

Slide 30 text

@kamilah_santos

Slide 31

Slide 31 text

@kamilah_santos

Slide 32

Slide 32 text

Spring Web Flux @kamilah_santos

Slide 33

Slide 33 text

Spring 5 abriu para o paradigma reativo e introduziu o WebFlux @kamilah_santos

Slide 34

Slide 34 text

Ele é uma estrutura assíncrona, podendo ser executada usando Servlet 3.1 NIO API @kamilah_santos

Slide 35

Slide 35 text

E também com ambientes em tempo de execução como o Netty @kamilah_santos

Slide 36

Slide 36 text

A reactive Stream specification visa padronizar as bibliotecas de Programação Reativa na JVM e, mais importante, especificar como elas devem se comportar para serem interoperáveis @kamilah_santos

Slide 37

Slide 37 text

Bibliotecas @kamilah_santos

Slide 38

Slide 38 text

Reactor @kamilah_santos

Slide 39

Slide 39 text

Publisher produz dados, mas só fara algo quando tiver uma subscription para fazer o push desses dados @kamilah_santos

Slide 40

Slide 40 text

https://tech.io/playgrounds/929/reactive-programming-with-reactor-3/Intro @kamilah_santos

Slide 41

Slide 41 text

Flux @kamilah_santos

Slide 42

Slide 42 text

Pode emitir de 0 a n eventos, e também onNext, onError e onComplete @kamilah_santos

Slide 43

Slide 43 text

@kamilah_santos

Slide 44

Slide 44 text

@kamilah_santos

Slide 45

Slide 45 text

Mono @kamilah_santos

Slide 46

Slide 46 text

Emite no máximo um evento, podendo ser onNext, On Error e onComplete também @kamilah_santos

Slide 47

Slide 47 text

@kamilah_santos

Slide 48

Slide 48 text

@kamilah_santos

Slide 49

Slide 49 text

Reactor Core @kamilah_santos

Slide 50

Slide 50 text

Reactor Netty @kamilah_santos

Slide 51

Slide 51 text

Reactor Test @kamilah_santos

Slide 52

Slide 52 text

Netty @kamilah_santos

Slide 53

Slide 53 text

Estrutura de IO não bloqueante e assíncrona @kamilah_santos

Slide 54

Slide 54 text

utilizada para dev de servidores altamente escaláveis @kamilah_santos

Slide 55

Slide 55 text

é possível trabalhar a nível socket e criar seus próprios protocolos de comunicação @kamilah_santos

Slide 56

Slide 56 text

para essas configurações de servidor NIO e bom ter conhecimento das threads, event loop, buffers e gerenciamento de memória @kamilah_santos

Slide 57

Slide 57 text

@kamilah_santos

Slide 58

Slide 58 text

@kamilah_santos

Slide 59

Slide 59 text

E como isso melhora minhas aplicações? @kamilah_santos

Slide 60

Slide 60 text

Utilizando webflux é mais fácil usar as features funcionais/reativas do java @kamilah_santos

Slide 61

Slide 61 text

Logo, menos código, a legibilidade melhora @kamilah_santos

Slide 62

Slide 62 text

Netty é assincrono e não bloqueante @kamilah_santos

Slide 63

Slide 63 text

Exemplo @kamilah_santos

Slide 64

Slide 64 text

@kamilah_santos

Slide 65

Slide 65 text

@kamilah_santos

Slide 66

Slide 66 text

@kamilah_santos

Slide 67

Slide 67 text

@kamilah_santos

Slide 68

Slide 68 text

@kamilah_santos

Slide 69

Slide 69 text

@kamilah_santos

Slide 70

Slide 70 text

@kamilah_santos

Slide 71

Slide 71 text

@kamilah_santos

Slide 72

Slide 72 text

@kamilah_santos

Slide 73

Slide 73 text

@kamilah_santos

Slide 74

Slide 74 text

@kamilah_santos

Slide 75

Slide 75 text

Demo: https://github.com/Kamilahsantos/thedevconf-demo- SpringWebFlux-SuperHeroesApi @kamilah_santos

Slide 76

Slide 76 text

Obrigada <3

Slide 77

Slide 77 text

Referências https://tech.io/playgrounds/929/reactive-programming-with-reactor- 3/transform https://www.callicoder.com/reactive-rest-apis-spring-webflux- reactive-mongo/ http://reactivex.io/languages.html https://projectreactor.io/ http://www.trieu.xyz/2019/04/netty-cookbook.html https://dzone.com/articles/build-a-simple-netty-application-with- and-without https://www.baeldung.com/netty https://developer.okta.com/blog/2018/09/21/reactive-programming- with-spring https://speakerdeck.com/olehdokuka/get-reactive-with-project- reactor-and-spring-5 https://speakerdeck.com/kamilahsantos/2020-d0013e50-afdf-4e9c- b411-7f22d2f3d64c https://speakerdeck.com/kamilahsantos/tdc-floripa-melhorando-a- performance-e-legibilidade-de-aplicacoes-java-com-spring-web-flux @kamilah_santos