Upgrade to Pro — share decks privately, control downloads, hide ads and more …

[Jornada Java] - Java: da orientação a objetos a aplicações web reativas

[Jornada Java] - Java: da orientação a objetos a aplicações web reativas

Transcript

  1. 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
  2. Kamila Santos Backend Developer @kamilah_santos

  3. Comunidades

  4. Vale lembrar: @kamilah_santos

  5. Pilares da orientação a objetos @kamilah_santos

  6. Abstração @kamilah_santos precisamos imaginar o que esse objeto irá realizar

    dentro de nosso sistema
  7. Abstração @kamilah_santos identidade ao objeto que vamos criar

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

  9. Abstração @kamilah_santos Esse objeto será capaz de executar ações ,

    que chamamos de métodos
  10. Encapsulamento @kamilah_santos "protege/esconde" objetos do restante da aplicação, utilizamos getters

    e setters para definir e acessar esses valores
  11. Polimorfismo @kamilah_santos Alteramos o funcionamento interno de um método herdado

    do objeto pai
  12. Herança @kamilah_santos classe filha herda comportamentos da classe pai

  13. S.O.L.I.D @kamilah_santos

  14. 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
  15. 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.
  16. 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….
  17. L : Liskov substitution principle Princípio da substituição de Liskov

    @kamilah_santos As classes derivadas devem poder ser substituíveis pelas classes bases
  18. 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”
  19. 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.
  20. Manifesto Reativo @kamilah_santos

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

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

  23. Resiliente O sistema permanece responsivo diante de falhas @kamilah_santos

  24. Elástico O sistema permanece responsivo diante de uma carga de

    trabalho variável. @kamilah_santos
  25. 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
  26. Maior uso das features funcionais/reativas do java @kamilah_santos

  27. @kamilah_santos

  28. @kamilah_santos

  29. @kamilah_santos

  30. @kamilah_santos

  31. @kamilah_santos

  32. Spring Web Flux @kamilah_santos

  33. Spring 5 abriu para o paradigma reativo e introduziu o

    WebFlux @kamilah_santos
  34. Ele é uma estrutura assíncrona, podendo ser executada usando Servlet

    3.1 NIO API @kamilah_santos
  35. E também com ambientes em tempo de execução como o

    Netty @kamilah_santos
  36. 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
  37. Bibliotecas @kamilah_santos

  38. Reactor @kamilah_santos

  39. Publisher produz dados, mas só fara algo quando tiver uma

    subscription para fazer o push desses dados @kamilah_santos
  40. https://tech.io/playgrounds/929/reactive-programming-with-reactor-3/Intro @kamilah_santos

  41. Flux @kamilah_santos

  42. Pode emitir de 0 a n eventos, e também onNext,

    onError e onComplete @kamilah_santos
  43. @kamilah_santos

  44. @kamilah_santos

  45. Mono @kamilah_santos

  46. Emite no máximo um evento, podendo ser onNext, On Error

    e onComplete também @kamilah_santos
  47. @kamilah_santos

  48. @kamilah_santos

  49. Reactor Core @kamilah_santos

  50. Reactor Netty @kamilah_santos

  51. Reactor Test @kamilah_santos

  52. Netty @kamilah_santos

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

  54. utilizada para dev de servidores altamente escaláveis @kamilah_santos

  55. é possível trabalhar a nível socket e criar seus próprios

    protocolos de comunicação @kamilah_santos
  56. para essas configurações de servidor NIO e bom ter conhecimento

    das threads, event loop, buffers e gerenciamento de memória @kamilah_santos
  57. @kamilah_santos

  58. @kamilah_santos

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

  60. Utilizando webflux é mais fácil usar as features funcionais/reativas do

    java @kamilah_santos
  61. Logo, menos código, a legibilidade melhora @kamilah_santos

  62. Netty é assincrono e não bloqueante @kamilah_santos

  63. Exemplo @kamilah_santos

  64. @kamilah_santos

  65. @kamilah_santos

  66. @kamilah_santos

  67. @kamilah_santos

  68. @kamilah_santos

  69. @kamilah_santos

  70. @kamilah_santos

  71. @kamilah_santos

  72. @kamilah_santos

  73. @kamilah_santos

  74. @kamilah_santos

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

  76. Obrigada <3

  77. 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