Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

1. Domain-Driven Design 2. Arquitetura de Software 3. Hanami 4. Ligando os pontos: Arquitetura evolucionária, DDD e Hanami 5. Fechamento Spoilers Agenda

Slide 4

Slide 4 text

Importante! Essa é a Ruby, minha gata ;)

Slide 5

Slide 5 text

Domain Driven Design

Slide 6

Slide 6 text

Domain Driven Design Nota do editor: não é de comer. Livro referência. Leia!

Slide 7

Slide 7 text

Domain Driven Design ”Cultivate rich model with Ubiquitous Language”

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

Domain Driven Design Domínio Nomes Lead Customer Contexto de: Loan Application Contexto de: Customer Account Contato Pesquise por Context Mapping & Bounded Context

Slide 10

Slide 10 text

Domain Driven Design Patterns táticos: definir responsabilidades dentro dos contextos

Slide 11

Slide 11 text

Domain Driven Design Domínio Nomes Lead Customer Contexto de: Loan Application Contexto de: Customer Account Modelo Lead + nome + valor de empréstimo + Contato Contato + falar com + telefone + email Contato Entities Repositories Value Objects Application Services Façades Factories Domain Services Domain Events Builders Infra Services

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

Domain Driven Design Domain Events ações no domínio, sendo as reações parte da Ubiquitous Language Pesquise por Event Storming

Slide 15

Slide 15 text

Domain Driven Design Domain-Driven Design Eric Evans (2003) Implementing Domain-Driven Design Vaughn Vernon (2011)

Slide 16

Slide 16 text

Arquitetura de Software

Slide 17

Slide 17 text

Arquitetura de Software

Slide 18

Slide 18 text

Arquitetura de Software Arquitetura de Software Comunicação entre as camadas do software

Slide 19

Slide 19 text

Arquitetura de Software ü Separação simples de implementar (e explicar) ü Atende software em fase inicial ou/e pequenos Arquitetura em Camadas (Layered Architecture)

Slide 20

Slide 20 text

Arquitetura de Software Clean Architecture Hexagonal Architecture

Slide 21

Slide 21 text

Arquitetura de Software Clean Architecture & Hexagonal Architecture

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

Arquitetura de Software Mas, e aquela Hispteiragem-esquerdo-comunista do CQRS ??????

Slide 24

Slide 24 text

CQRS não é um tipo de arquitetura

Slide 25

Slide 25 text

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/

Slide 26

Slide 26 text

Arquitetura de Software Greg Young ”Starting with CQRS, CQRS is simply the creation of two objects where there was previously only one.”

Slide 27

Slide 27 text

Arquitetura de Software Pesquise por Alistair Cockburn CQRS no Youtube

Slide 28

Slide 28 text

Hanami Finalmente!

Slide 29

Slide 29 text

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

Slide 30

Slide 30 text

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

Slide 31

Slide 31 text

Hanami framework

Slide 32

Slide 32 text

Arquitetura, Domain-Driven Design Hanami

Slide 33

Slide 33 text

DDD + Arquitetura + Hanami Dependências isoladas: construir Use Cases & Domain Model isolados

Slide 34

Slide 34 text

DDD + Arquitetura + Hanami

Slide 35

Slide 35 text

DDD + Arquitetura + Hanami Router View (view object) Validations Model Hanami-rb project name Controller (através do Action class)

Slide 36

Slide 36 text

DDD + Arquitetura + Hanami § Cada módulo (Bounded Context) deve ser independente. § Objetos podem assumir o mesmo nome mas com responsabilidades diferentes.

Slide 37

Slide 37 text

Beleza, fera. Só falta me dizer que na Creditas é feito desse jeito e tal

Slide 38

Slide 38 text

DDD + Arquitetura + Hanami

Slide 39

Slide 39 text

DDD + Arquitetura + Hanami Path: boundaries/use_case

Slide 40

Slide 40 text

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

Slide 41

Slide 41 text

Por fim…

Slide 42

Slide 42 text

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

Slide 43

Slide 43 text

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