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

Construindo estruturas complexas com serialização de objetos

Construindo estruturas complexas com serialização de objetos

Durante o processo de desenvolvimento, novos requisitos vão surgindo e você precisa ir mudando seu código, até chegar ao ponto em que você precisa construir saídas complexas para atender os determinados contextos em que seus objetos são serializados. Para esta talk, a ideia é mostrar desde a forma simples de serialização e a evolução até a construção dessas complexas estruturas.

Evento: PHP Experience 2018
Link: https://eventos.imasters.com.br/phpexperience/

9557145449878307811e0b79f0d6e9cd?s=128

Alef Castelo

March 06, 2018
Tweet

Transcript

  1. Construindo estruturas complexas com serialização de objetos

  2. Alef Castelo https://twitter.com/alefcastelo https://github.com/alefcastelo https://www.linkedin.com/in/alefcastelo/

  3. None
  4. http://phpcomrapadura.org

  5. Agenda • O que é serialização de objetos? • serialize

    • json_encode + JsonSerializable • Fractal • JMS Serializer
  6. O que é serialização de objetos?

  7. É o processo de salvar ou transformar um objeto em

    um outro tipo de dado ou armazenamento.
  8. Como funciona esse processo?

  9. None
  10. None
  11. None
  12. A função serialize retorna uma string contendo uma representação byte-stream.

    Ela é capaz de serializar propriedades marcadas como private ou protected.
  13. None
  14. None
  15. None
  16. Quando usar a função serialize do php?

  17. Quando é necessário guardar o estado do objeto e reconstruí-lo

    novamente.
  18. Em muitos casos esse tipo de serialização não é o

    suficiente, pois precisamos transitar ou salvar dados em outros formatos.
  19. JSON JavaScript Object Notation

  20. None
  21. None
  22. public

  23. Você precisa trazer informações das outras propriedades também!

  24. None
  25. None
  26. Person agora tem uma nova propriedade chamada pets e ela

    precisa vir na saída da serialização!
  27. None
  28. None
  29. None
  30. None
  31. Porém o size e a breed do pet, não é

    necessário vir na saída do json!
  32. VISH

  33. Serializar o objeto não é o suficiente. Você precisa de

    algo que consiga definir regras para a saída!
  34. None
  35. Fractal Fractal provê uma camada de apresentação e transformação para

    uma saída complexa de dados.
  36. Alguns conceitos do Fractal

  37. Transformers: são classes ou funções anônimas que têm a responsabilidade

    de converter seu objeto em um simples array. Include: é quando seu objeto possui relacionamento e esses relacionamentos precisam ser incluídos na saída. Manager: é quem vai transformar seus dados em determinados formatos.
  38. None
  39. None
  40. None
  41. None
  42. None
  43. None
  44. None
  45. None
  46. None
  47. Ainda assim, pode ser muito custoso ter que criar e

    manter tantas classes para definir um ou mais grupos de saída.
  48. None
  49. JMS Serializer Contém um rico conjunto de ferramentas para adaptar

    a saídas às suas necessidades específicas.
  50. None
  51. None
  52. None
  53. None
  54. Mas essa não é a única forma de excluir essas

    propriedades usando JMS Serializer!
  55. Você pode criar grupos para suas saídas!

  56. None
  57. None
  58. None
  59. Com essas mudanças você terá a mesma saída!

  60. None
  61. person_detail

  62. person_detail

  63. pet_list

  64. person_detail pet_list

  65. Porém as coisas não param por aí!

  66. E se você precisar mudar o nome da saída da

    propriedade, mas não da classe? E a propriedade fosse exibida somente até determinada versão?
  67. None
  68. None
  69. Agora você tem um auto-relacionamento onde a classe Person tem

    a propriedade friends!
  70. None
  71. O que será que vai acontecer?

  72. None
  73. None
  74. None
  75. None
  76. None
  77. None
  78. A serialização de objetos pode se tornar algo complexo, onde

    existem várias combinações diferentes para cada tipo de saída!
  79. As possibilidades não param aqui!

  80. Existem 31 classes com possibilidades de mudar sua saída.

  81. JSON não é o único formato

  82. Cuidados com a serialização?!

  83. Com a definição errada dos grupos ou mesmo sem a

    definição deles, a serialização pode se tornar um gargalo em seu projeto.
  84. SuperClosure: 25 230 135 downloads JMS Serializer: 18 399 027 downloads Fractal: 6 041 438 downloads

  85. https://github.com/alefcastelo/EstruturasComplexasComSerializacao

  86. Perguntas?

  87. http://php.net/manual/pt_BR/function.serialize.php http://php.net/manual/pt_BR/function.json-encode.php http://php.net/manual/pt_BR/class.jsonserializable.php http://fractal.thephpleague.com/ https://jmsyst.com/libs/serializer Referências