Sua aplicação não é filha de um framework

1.059 visualizações

Publicada em

O PHP cresceu muito e com isso veio a saga dos Frameworks. Eles são ótimos para agilizar o desenvolvimento de qualquer aplicação. São legais... Só que não!.. Quer dizer, em partes. Frameworks têm dificultado coisas simples. Eles têm causado infartes nos corações das apps, dando muito trabalho a times de desenvolvimento. Mostraremos como arquitetar sua app sem uma forte dependência de um framework.

Publicada em: Software
0 comentários
11 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

Sem downloads
Visualizações
Visualizações totais
1.059
No SlideShare
0
A partir de incorporações
0
Número de incorporações
22
Ações
Compartilhamentos
0
Downloads
29
Comentários
0
Gostaram
11
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

Sua aplicação não é filha de um framework

  1. 1. Sua aplicação não é filha de um framework Dev In Company 2014
  2. 2. - Daniel Lima dos Anjos Pinheiro, a.k.a “Tonho da Lua” Sobre mim...
  3. 3. - Daniel Lima dos Anjos Pinheiro, a.k.a “Tonho da Lua” - Programador há “um tanto” de tempo (+10 anos) Sobre mim...
  4. 4. - Daniel Lima dos Anjos Pinheiro, a.k.a “Tonho da Lua” - Programador há “um tanto” de tempo (+10 anos) - APAIXONADO por Arquitetura de Software Sobre mim...
  5. 5. - Daniel Lima dos Anjos Pinheiro, a.k.a “Tonho da Lua” - Programador há “um tanto” de tempo (+10 anos) - APAIXONADO por Arquitetura de Software - Músico, Produtor, DJ… essas coisas aí. Sobre mim...
  6. 6. - Daniel Lima dos Anjos Pinheiro, a.k.a “Tonho da Lua” - Programador há “um tanto” de tempo (+10 anos) - APAIXONADO por Arquitetura de Software - Músico, Produtor, DJ… essas coisas aí. - @yourwebmaker Sobre mim...
  7. 7. - Daniel Lima dos Anjos Pinheiro, a.k.a “Tonho da Lua” - Programador há “um tanto” de tempo (+10 anos) - APAIXONADO por Arquitetura de Software - Músico, Produtor, DJ… essas coisas aí. - @yourwebmaker (só escrevo besteira) Sobre mim...
  8. 8. - Daniel Lima dos Anjos Pinheiro, a.k.a “Tonho da Lua” - Programador há “um tanto” de tempo (+10 anos) - APAIXONADO por Arquitetura de Software - Músico, Produtor, DJ… essas coisas aí. - @yourwebmaker (só escrevo besteira) - fb.com/dlpinheiro Sobre mim...
  9. 9. - Daniel Lima dos Anjos Pinheiro, a.k.a “Tonho da Lua” - Programador há “um tanto” de tempo (+10 anos) - APAIXONADO por Arquitetura de Software - Músico, Produtor, DJ… essas coisas aí. - @yourwebmaker (só escrevo besteira) - fb.com/dlpinheiro Sobre mim...
  10. 10. - Daniel Lima dos Anjos Pinheiro, a.k.a “Tonho da Lua” - Programador há “um tanto” de tempo (+10 anos) - APAIXONADO por Arquitetura de Software - Músico, Produtor, DJ… essas coisas aí. - @yourwebmaker (só escrevo besteira) - fb.com/dlpinheiro Sobre mim...
  11. 11. - Maior site de cifras do Brasil - 560mil visitas diárias - Projeto de 18 anos e…. crescendo!
  12. 12. - Código legado em alguns lugares - Código espalhado - “Feito em casa” - Despadronizado - Difícil de manter
  13. 13. Vamos usar um framework!
  14. 14. Full-stack - Zend - Symfony - Cake - Laravel - Phalcon - “um tanto” Qual iríamos usar?
  15. 15. Full-stack - Zend - Symfony - Cake - Laravel - Phalcon - “um tanto” Qual iríamos usar? Micro - Silex - Respect - Slim - Aura - Flight - “um tanto”
  16. 16. Phalcon
  17. 17. Phalcon Prós - Extension do PHP - Compilado - Alta performance - Baixo consumo de memória - Responde a um grande número de reqs/s
  18. 18. Phalcon
  19. 19. Phalcon
  20. 20. Phalcon
  21. 21. Phalcon
  22. 22. Phalcon Contras - Escrito em C - Quem aqui é um bom desenvolvedor C? - Péssimo para testar - “final” em diversos métodos - Péssimo para debugar - Stack-trace? Onde? Como?
  23. 23. Quem aqui é um bom desenvolvedor C?
  24. 24. OK... Dá pra levar #chatiado
  25. 25. Até que…
  26. 26. HHVM
  27. 27. HHVM - Symfony 2 + HHVM > Phalcon - Zend 2 + HHVM > Phalcon - Controle do framework usado - Debug e manutenção do framework usado
  28. 28. HHVM
  29. 29. HHVM
  30. 30. HHVM Assunto pra outra palestra =)
  31. 31. Let’s code direito!!!
  32. 32. Let’s Desacoplar!
  33. 33. Não… Pera!
  34. 34. Pense!
  35. 35. - Isso não é receita de bolo! - Assim como quase tudo em dev também não é! - Talvez não seja o caso para sites novos! - Não é necessário reinventar a roda! Pense!
  36. 36. Pensou?
  37. 37. Let’s code direito!!!
  38. 38. Separando conceitos
  39. 39. MVC?
  40. 40. Quanto mais camadas melhor!
  41. 41. Divida camadas em sub- camadas
  42. 42. User Interface Application Domain Infra Forms Nav Grid Search Input Validation Session Auth Router Domain Services Entities Repositories Value Objects Database Cache FileSystem Log ... Factories
  43. 43. Domain Domain Services Entities Repositories Value Objects Factories Domain do Cifra Club
  44. 44. Domain Domain Services Entities Repositories Value Objects Factories - Exibir cifras - Transpor cifras - Listar músicas - Ver video aulas - Enviar cifra - Moderar cifra - Moderar usuários - Top artistas por periodo - Top cifras por periodo - Segredinhos =)
  45. 45. Domain Domain Services Entities Repositories Value Objects Factories Domain é vida! - Independente do framework, ele será o mesmo! - Se importe com ele, de verdade =) - Coração da sua aplicação!
  46. 46. Domain Domain Services Entities Repositories Value Objects Factories Domain é vida! - Independente do framework, ele será o mesmo! - Se importe com ele, de verdade =) - Coração da sua aplicação! - Ele NÃO DEVE saber qual framework é usado. - Ele NÃO DEVE saber qual banco ou infra é usada.
  47. 47. Domain Domain Services Entities Repositories Value Objects Factories Mas… Como separá-lo?
  48. 48. Interfaces
  49. 49. Repositories
  50. 50. Services
  51. 51. S.O.L.I.D.
  52. 52. Tudo isso ligado com...
  53. 53. Injeção de Dependência
  54. 54. Cadê o código?
  55. 55. - Entidades - Interfaces dos repositórios - Implementação dos repositórios - Serviço - Controller - Config das dependencias - Index.php Gist
  56. 56. Reflexões sobre o gist...
  57. 57. Apesar de parecerem “simples” e “facilitar” a vida, caia fora deles!
  58. 58. “deles”, quem?
  59. 59. dos frameworks?
  60. 60. NÃO!!!
  61. 61. Desses caras aqui!!!
  62. 62. - C.R.U.D. Desses caras aqui!!!
  63. 63. - C.R.U.D. - Arrays Desses caras aqui!!!
  64. 64. - C.R.U.D. - Arrays - Rotinas Desses caras aqui!!!
  65. 65. - C.R.U.D. - Arrays - Rotinas - Código “Deus” Desses caras aqui!!!
  66. 66. Interfaces devem representar o que seu Domain faz...
  67. 67. interface MusicaRepositoryInterface { function buscarMaisAcessadas($quantidade = 1000); function buscarMaisAcessadasPorArtista(Artista $artista); } #bom
  68. 68. interface ArtistaRepositoryInterface { function buscarMaisAcessados(Periodo $periodo); } #bom
  69. 69. … E depois devem ser implementadas em outras camadas!
  70. 70. class MusicaDbRepository implements MusicaRepositoryInterface { function buscarMaisAcessadas($quantidade = 1000) { //.. acessa o banco } function buscarMaisAcessadasPorArtista(Artista $artista) { //.. acessa o banco } } #bom
  71. 71. “Saber” muito em OO é MUITO ruim!
  72. 72. class DomainClass { public function fazAlgumaCoisa() { $infraObject = new InfraClass; $applicationObject = new ApplicationClass; $uiObject = new UIClass; } } #ruim
  73. 73. class DomainClass { public function fazAlgumaCoisa( DomainInterfaceX $infraObject, DomainInterfaceY $appObject, DomainInterfaceZ $uiObject, ) { //.. } } #bom
  74. 74. Evite usar o operador “new” dentro de métodos
  75. 75. public function fazAlgo() { $componente = new Componente; } #ruim
  76. 76. $componente = new SeuComponente; //.. public function fazAlgo(SeuComponente $componente) { $foo = $componente->fazAlgo(); } #bom
  77. 77. Evite singletons dentro de *suas* classes
  78. 78. public function fazAlgo() { $componente = $frameworkComponente:: getInstance(); } #ruim
  79. 79. $componente = $frameworkComponente::getInstance(); //.. public function fazAlgo(SeuComponente $componente) { $componente->fazAlgo(); } #bom
  80. 80. Evite herança de componentes do framework no seu Domain
  81. 81. class DomainClass extends FrameworkClass #ruim
  82. 82. class DomainClass #bom
  83. 83. Lembre-se: “Software development is all design”
  84. 84. Seja pramático na escolha das suas libs...
  85. 85. … evite libs “novas”, pouco ativas, non-community standards…
  86. 86. #use libs de verdade TWIG Monolog Doctrine sfCrawler aurasignal
  87. 87. Pense!
  88. 88. Phalcon???
  89. 89. Perguntas?
  90. 90. Guilherme Blanco Agradecimentos Luís Cobucci
  91. 91. Referências Patterns of Enterprise Application Architecture Domain-Driven Design: Tackling Complexity in the Heart of Software Refactoring: Improving the Design of Existing Code
  92. 92. Estamos contratando!
  93. 93. Valeu!

×