Hanami: elemento para arquitetura evolucionária e conciso design de software

Hanami: elemento para arquitetura evolucionária e conciso design de software

Hanami se propõe a ser um framework web completo ainda que simples e leve para o desenvolvimento de aplicações e APIs. Compramos a ideia e a levamos para outros níveis!

Nesta apresentação, mostrarei como, mesmo ainda na versão beta _(ainda sob o nome Lotus-rb)_, este framework possibilitou construirmos nosso Core API, evoluindo a arquitetura desde o Layered Architecture até Hexagonal e Eventos, buscando alinhar-se ao negócio através da Ubiquitous Language e Tactical & Strategical Patterns do Domain-Driven Design ao longo destes 14 meses que estamos rodando com o Hanami em produção.

Inspire-se com os desafios vencidos ao longo deste processo e possíveis próximos passos!

C0468655a0200c06a9094f647f633980?s=128

Hélio Costa e Silva

July 22, 2017
Tweet

Transcript

  1. Hanami Elemento para arquitetura evolucionária e conciso design de software

  2. Pedreiro de Software @hlegius http://blog.hlegi.us http://diariodebordo.creditas.com.br

  3. 1. Domain-Driven Design 2. Arquitetura de Software 3. Hanami 4.

    Ligando os pontos: Arquitetura evolucionária, DDD e Hanami 5. Fechamento Spoilers Agenda
  4. Importante! Essa é a Ruby, minha gata ;)

  5. Domain Driven Design

  6. Domain Driven Design Nota do editor: não é de comer.

    Livro referência. Leia!
  7. Domain Driven Design ”Cultivate rich model with Ubiquitous Language”

  8. Domain Driven Design Patterns estratégicos: manter a integridade do modelo

  9. Domain Driven Design Domínio Nomes Lead Customer Contexto de: Loan

    Application Contexto de: Customer Account Contato Pesquise por Context Mapping & Bounded Context
  10. Domain Driven Design Patterns táticos: definir responsabilidades dentro dos contextos

  11. Domain Driven Design Domínio Nomes Lead Customer Contexto de: Loan

    Application Contexto de: Customer Account Modelo Lead <Entity> + nome + valor de empréstimo + Contato Contato <Value Object> + falar com + telefone + email Contato Entities Repositories Value Objects Application Services Façades Factories Domain Services Domain Events Builders Infra Services
  12. Domain Driven Design Bater o dedo do pé na quina

    da cama (em um dia frio) DOR E AGONIA!!!! Resulta em Pé inchado Espectadores tiram sarro da tua cara Linha do tempo dos fatos
  13. Domain Driven Design Ação Reação Interessados Bater o dedo do

    pé na quina da cama (em um dia frio) DOR E AGONIA!!!! Resulta em Pé inchado Espectadores tiram sarro da tua cara Linha do tempo dos fatos
  14. Domain Driven Design Domain Events ações no domínio, sendo as

    reações parte da Ubiquitous Language Pesquise por Event Storming
  15. Domain Driven Design Domain-Driven Design Eric Evans (2003) Implementing Domain-Driven

    Design Vaughn Vernon (2011)
  16. Arquitetura de Software

  17. Arquitetura de Software

  18. Arquitetura de Software Arquitetura de Software Comunicação entre as camadas

    do software
  19. Arquitetura de Software ü Separação simples de implementar (e explicar)

    ü Atende software em fase inicial ou/e pequenos Arquitetura em Camadas (Layered Architecture)
  20. Arquitetura de Software Clean Architecture Hexagonal Architecture

  21. Arquitetura de Software Clean Architecture & Hexagonal Architecture

  22. Arquitetura de Software Ports & Adapters Alistair Cockburn 199x (1993-1999)

    Ivar Jacobson 1992 Use Case Driven Hexagonal Clean Architecture / Screaming Architecture Alistair Cockburn 2005 Uncle bob 2011
  23. Arquitetura de Software Mas, e aquela Hispteiragem-esquerdo-comunista do CQRS ??????

  24. CQRS não é um tipo de arquitetura

  25. Arquitetura de Software ”Many people have been getting confused over

    what CQRS is. They look at CQRS as being an architecture; it is not. ” Greg Young @ http://codebetter.com/gregyoung/2010/02/16/cqrs-task-based-uis-event-sourcing-agh/
  26. Arquitetura de Software Greg Young ”Starting with CQRS, CQRS is

    simply the creation of two objects where there was previously only one.”
  27. Arquitetura de Software Pesquise por Alistair Cockburn CQRS no Youtube

  28. Hanami Finalmente!

  29. Hanami framework http://sequel.jeremyevans.net http://rom-rb.org

  30. Hanami framework https://github.com/hanami/model#concepts

  31. Hanami framework

  32. Arquitetura, Domain-Driven Design Hanami

  33. DDD + Arquitetura + Hanami Dependências isoladas: construir Use Cases

    & Domain Model isolados
  34. DDD + Arquitetura + Hanami

  35. DDD + Arquitetura + Hanami Router View (view object) Validations

    Model Hanami-rb project name Controller (através do Action class)
  36. DDD + Arquitetura + Hanami § Cada módulo (Bounded Context)

    deve ser independente. § Objetos podem assumir o mesmo nome mas com responsabilidades diferentes.
  37. Beleza, fera. Só falta me dizer que na Creditas é

    feito desse jeito e tal
  38. DDD + Arquitetura + Hanami

  39. DDD + Arquitetura + Hanami Path: boundaries/use_case

  40. Creditas & Hanami, DDD e tudo isso que você falou

    ae Layered Architecture Out/2015 Domain Events CQRS ? Hanami (beta v0.5) Dez/2015 Melhorias na Presentation Layer Form Objects Junho/2016 Fronteira entre Form Object & Domain Application Service Ago/2016 Layered Architecture Hexagonal Architecture Abril/2017
  41. Por fim…

  42. Domain-Driven Design & Active Record (Pattern [ou não]) http://domain-driven-design.3010926.n2.nabble.com/DDD-and-ActiveRecord-td5421597.html

  43. @hanamirb_sp /hanamirb_sp Hanami Ruby Brasil http://diariodebordo.creditas.com.br https://stackoverflow.com/jobs/companies/creditas