06 - Giovanni Bassi - CQS, CQRS, DDD, DbC, DDDD

Preview:

DESCRIPTION

Quem sabe alguma coisa costuma desenvolver em camadas, separar responsabilidades, normalizar o banco de dados, usar um ORM, entre outras práticas conhecidas e defendidas por boa parte da comunidade. Mas, por algum motivo, tais práticas, que deveriam estar tornando nosso trabalho mais simples, acabaram por torná-lo mais complexo. Nessa palestra veremos como a separação dos contextos de escrita (transacional) e leitura (consultas) podem deixar a arquitetura de uma aplicação cooperativa muito mais limpa, fácil de entender, escalável e robusta. Tudo isso, sem deixar pra trás um bom modelo rico de domínio.

Citation preview

1

Giovanni Bassi

giggio@giggio.net

www.lambda3.com.br

blog.lambda3.com.br

5

@GiovanniBassi

Status atual

Separando a

consulta

Cenário

colaborativo

Separando um

pouco mais

Oportunidades

Mudanças na

modelagem

Q&A

Interface gráfica

Infra

Serviços

Controller

View

Representantes

ORM

Representantes

Representantes

Repositório ordena??

Representante Total de

vendas

Número de

clientes

% sobre a

meta

Gerente

Darth Vader 50.000 15 105% Imperador

Han Solo 23.000 10 90% Luke Skywalker

Representantes

Consulta

Alteração

Consulta de

Representantes

SQL

Represen

tantes

Consulta de

Representantes

ORM

Represen

tantes

Sistema

Interface gráfica

Infra

Serviços

Controller

View Cache

Palestra de Cache Distribuído com o

Daibert em seguida!

http://en.wikipedia.org/wiki/ACID

http://en.wikipedia.org/wiki/Eventual_consistency

http://bit.ly/captheorem

Consulta de

Representantes

SQL (em

banco

específico)

Represen

tantes

Representantes

Banco de

Consulta

Banco de

Transações

Consulta de

Representantes

Representantes

Banco de

Consulta

Banco de

Transações

Consulta de

Representantes Consulta

Comando

Representantes

Banco de

Consulta

Banco de

Transações

Consulta de

Representantes

Representantes

Consulta de

Representantes

Banco de

Transações

Banco de

Consulta

Representantes

Consulta de

Representantes

Banco de

Transações

Banco de

Consulta

Representantes

Consulta de

Representantes

Banco de

Transações

Banco de

Consulta

Cliente

Nome

Email

EhEspecial

FaixaDeDesconto

EhValido()

Cliente

AtualizarDados(nome, email)

DarDesconto(percentual)

TornarEspecial()

Cliente

AtualizarDados(nome, email)

DarDesconto(percentual)

TornarEspecial()

AtualizaDadosCliente

IdCliente

Nome

Email

DarFaixaDeDescontoAoCliente

IdCliente

Percentual

TornarClienteEspecial

IdCliente

Cliente

AtualizarDados(nome, email)

DarDesconto(percentual)

TornarEspecial()

ClientesEspeciais

IdCliente

Nome

Email

Clientes

IdCliente

PercentualDesconto

PaginaAtual

NumeroDePaginas

duplicação de dados: ok denormalização: ok dados na última camada: ok atomicidade: desnecessária consistência: em algum momento (não agora) exceções a regra: menos prioritárias fronteira transacional: menor que uma entidade entidades de domínio na UI: malignas camadas: menos... cache: banco NOSQL sem segurança banco relacional: provavelmente desnecessário em diversos pontos repositórios: não paginam nem ordenam

Rollback!

Obrigado! Giovanni Bassi

giggio@giggio.net

www.lambda3.com.br

blog.lambda3.com.br

Giovanni Bassi giggio@giggio.net

www.lambda3.com.br

blog.lambda3.com.br

Recommended