SlideShare a Scribd company logo
1 of 68
Download to read offline
Globalcode	–	Open4education
Como Domain Driven Design e Strategic Design
estão nos ajudando a modernizar um legado
Luiz Costa
gutomcosta@gmail.com / @gutomcosta
twitter.com/gutomcosta
github.com/gutomcosta
www.sagadoprogramador.com.br
medium.com/saga-do-programador
Contexto
Sistema para um empresa de medicina do trabalho
realizar atendimentos de medicina ocupacional por
todo o Brasil e fornecer uma análise inteligente
sobre o perfil dos colaboradores de uma empresa.
Mas como todo projeto, no
início, tudo é muito
simples…
Era só uma "Fila"…
E hoje em dia até envia
email
+ de 5 anos de projeto
+ 10 desenvolvedores passaram no time
Python e Django 1.4
< 50% test coverage
14 servidores = 1 para cada clínica
aberta
Depois de algum tempo em
produção….
•bugs e mais bugs
•altera uma parte, quebra outra
•bug em uma parte, sistema fora do ar
•demora nas entregas
•pressão do cliente para entregar mais
os problemas começaram…
Aplicação Web tradicional
algo assim
Isso não é uma service layer, é algo
parecido com um TransactionScript
models sendo um
espelho do banco de
dados
WTF?
• lógica de domínio espalhada em
Controllers, Models e Services
• models espelhando exatamente o
modelo de dados
• foco no framework e não no domínio
do problema
Como melhorar este projeto?
Domain Driven Design
Domain Model
http://martinfowler.com/eaaCatalog/domainModel.html
the blue and the red book
ENTITIES
REPOSITORIES
VALUE OBJECTS
FACTORIES
SERVICES
Building Blocks
Strategic Design
…modeling and design decisions that
apply to large parts of the system. Such
decisions affect the entire project and
have to be decided at team level.
“Domain Driven Design, Chapter 14 - Maintaining Model Integrity", pág: 335
Eric Evans - Blue Book
Strategic Design
…modeling and design decisions that
apply to large parts of the system. Such
decisions affect the entire project and
have to be decided at team level.
“Domain Driven Design, Chapter 14 - Maintaining Model Integrity", pág: 335
Eric Evans - Blue Book
BOUNDED CONTEXT
CONTEXT MAP
ANTI-CURRUPTION LAYER
SHARED KERNEL
OPEN HOST SERVICE
PUBLISHED LANGUAGE
…
Existe vida além parte 1 do livro azul
Big Domain Model?
Not all of a large system will be
well designed.
Eric Evans on Strategic Design presentations
https://www.infoq.com/presentations/strategic-design-evans
Total unification of the domain
model for a large system will
not feasible or cost-effective
“Domain Driven Design, Chapter 14 - Maintaining Model Integrity", pág: 332
Eric Evans - Blue Book
Como dividir o domínio?
Bounded Context
Bounded Context
…delimits the applicability of a particular
model so that team members have a clear
and shared understanding of what has to
be consistent and how it relates to other
contexts.
“Domain Driven Design, Chapter 14 - Maintaining Model Integrity", pág: 336
Eric Evans - Blue Book
Bounded Context
…delimits the applicability of a particular
model so that team members have a clear
and shared understanding of what has to
be consistent and how it relates to other
contexts.
“Domain Driven Design, Chapter 14 - Maintaining Model Integrity", pág: 336
Eric Evans - Blue Book
Bounded Context
…delimits the applicability of a particular
model so that team members have a clear
and shared understanding of what has to
be consistent and how it relates to other
contexts.
“Domain Driven Design, Chapter 14 - Maintaining Model Integrity", pág: 336
Eric Evans - Blue Book
Repensando as Fronteiras
Contexto A Contexto B Contexto C
Mesma entidade modelada
em vários contextos
Paciente
Atendimento
+ qual nome, nascimento…?
+ qual dia do agendamento?
+ qual empresa pertence?
+ qual é a função que exerce?
Paciente
Gestor de Periódicos
+ qual é o proximo exame?
+ quantos dias faltam para vencer?
Paciente
Financeiro
+ qual custo dos exames feitos?
+ alguma condição de desconto?
É responsabilidade de cada
contexto modelar os dados
da melhor maneira, de
acordo com a as suas
responsabilidades.
Como implementamos?
E o que micro-serviços tem com isso?
Anatomia de um
Bounded Context
Bounded Context
Domain LayerApplication Layer
use case
use case
use case
Repository
Entity
Value Object
Infrastructure Layer
Entity
DAO
Logger
Service
Module
Application
Layer
Domain Layer
Atendimento.Fila
Infrastructure Layer
Implementação de um Caso de Uso
o fluxo de execução é simples e limpo
todas as
dependências são
declaradas o
construtor
Foco total no Domain Model
Domain Model != Model
Todas as regras de negócio são
programadas aqui. Normalmente são
objetos python puros, sem relação com
persistência ou infra-estrutura
Expostas
através de
casos de uso
Nossa estratégia para
dominar o legado
Strangler Applicationwww.martinfowler.com/bliki/StranglerApplication.html
…An alternative route is to gradually
create a new system around the edges of
the old, letting it grow slowly over several
years until the old system is strangled.
www.martinfowler.com/bliki/StranglerApplication.html
www.martinfowler.com/bliki/StranglerApplication.html
Legado
Nova
Funcionalidade
Nova
Funcionalidade
Nova
Funcionalidade
O design deve permitir
atrasar decisões
Identificar e evidenciar as
fronteiras através de Libs
Don’t distribute your objects.
http://martinfowler.com/books/eaa.html
O isolamento do legado se dá através de indireções nos objetos da fronteira. Nesta
visão de alto nível, é possível ver como uma funcionalidade é anexada ao código do
Legado. A ideia básica é o novo módulo definir um conjunto de interfaces/conectores
para troca de informações.
Em uma abordagem de lib, estes
conectores se materializam em um
conjunto de interfaces que devem ser
implementadas pela Lib.
fronteira do sistema
Inicialmente, os novos contextos são
projetos novos, que devem funcionar
como Libs. Deve ser possível extrair a lib
para rodar em um runtime diferente
sem muitas dificuldades.
O que fazer quando é
preciso usar dados do
legado no módulo novo?
Dependency Inversion
Principlehttps://en.wikipedia.org/wiki/Dependency_inversion_principle
Um módulo ou contexto novo define um conjunto de interfaces
que serão implementadas diretamente no legado.
interfaces definidas pelo módulo
o contexto “Atendimento” depende de dados
que estão definidos no legado. Neste caso, o
módulo que necessita dos dados, define o
contrato de comunicação e o legado
implementa este contrato, reutilizando
objetos existentes ou escrevendo código
novo. O importante é que a definição das
interfaces é feita de acordo com as
intenções do módulo novo e não com os
detalhes do código legado
O que fazer se o legado
precisar de dados do
módulo novo?
Publish/Subscribe ou
Observershttps://en.wikipedia.org/wiki/Publish%E2%80%93subscribe_pattern
https://en.wikipedia.org/wiki/Observer_pattern
A solução mais comum para este caso é o uso de eventos. O módulo
publica um conjunto de eventos e o legado assina estes eventos.
no lado do Legado, dentro da ACL, são definido
casos de uso que serão estimulados pelos
handlers de tratamento dos eventos.
o caso de uso PatientCheckin, durante
sua execução, publica o eventos
“PatientCheckedIn”. Este evento
contem os dados necessários para
comunicação com o legado,
normalmente serializado em um
JSON ou usando um Hash.
Como juntar isso tudo e
extrair um micro-serviço?
Este exemplo, mostra com a arquitetura permite separar os componentes
em runtimes diferentes, inclusive com banco de dados próprio.
aqui, a lib foi incluída em uma aplicação web e isolada
através de uma Anti-Corruption Layer (ACL). A
vantagem de se usar uma ACL é o isolamento do código
já criado. As alterações necessárias na lib são muito
pequenas e a própria ACL pode tratar os problemas de
comunicação com o legado, logar, lançar exceções, etc.
do lado do legado, a própria api já
funciona como uma ACL.
Normalmente esta api vai ser
implementada com Http puro,
usando formatos simples como
JSON para troca de dados
Chamadas diretas na api do legado ou através de uma
arquitetura event-driven.
Broker de mensagens, por exemplo:
JMS, ActiveMQ, RabbitMQ, etc
conjunto de EventHandlers
interessados nas mensagens
Resumo da nossa
estratégia
1 - Reúna o time com algum
especialista do domínio e
faça um desenho inicial dos
Bounded Contexts
2 - Evidencie as fronteiras
inicialmente através
módulos no código fonte
3 - Extraia os módulos que
compõem um Bounded
Context para uma lib
4 - Se necessário, exponha
a mesma lib como micro-
serviço
Obrigado!

More Related Content

What's hot

CQRS and Event Sourcing
CQRS and Event Sourcing CQRS and Event Sourcing
CQRS and Event Sourcing Inho Kang
 
Design patterns for microservice architecture
Design patterns for microservice architectureDesign patterns for microservice architecture
Design patterns for microservice architectureThe Software House
 
Introduction to Event Sourcing
Introduction to Event SourcingIntroduction to Event Sourcing
Introduction to Event SourcingJeffrey T. Fritz
 
Developing event-driven microservices with event sourcing and CQRS (svcc, sv...
Developing event-driven microservices with event sourcing and CQRS  (svcc, sv...Developing event-driven microservices with event sourcing and CQRS  (svcc, sv...
Developing event-driven microservices with event sourcing and CQRS (svcc, sv...Chris Richardson
 
Microservice Architecture
Microservice ArchitectureMicroservice Architecture
Microservice Architecturetyrantbrian
 
Software architecture for high traffic website
Software architecture for high traffic websiteSoftware architecture for high traffic website
Software architecture for high traffic websiteTung Nguyen Thanh
 
IoT & Azure (EventHub)
IoT & Azure (EventHub)IoT & Azure (EventHub)
IoT & Azure (EventHub)Mirco Vanini
 
Developing Terraform Modules at Scale - HashiTalks 2021
Developing Terraform Modules at Scale - HashiTalks 2021Developing Terraform Modules at Scale - HashiTalks 2021
Developing Terraform Modules at Scale - HashiTalks 2021TomStraub5
 
Azure Web Apps - Introduction
Azure Web Apps - IntroductionAzure Web Apps - Introduction
Azure Web Apps - IntroductionChristopher Gomez
 
Event Sourcing & CQRS, Kafka, Rabbit MQ
Event Sourcing & CQRS, Kafka, Rabbit MQEvent Sourcing & CQRS, Kafka, Rabbit MQ
Event Sourcing & CQRS, Kafka, Rabbit MQAraf Karsh Hamid
 
Infrastructure as Code for Beginners
Infrastructure as Code for BeginnersInfrastructure as Code for Beginners
Infrastructure as Code for BeginnersDavid Völkel
 
Automatice el proceso de entrega con CI/CD en AWS
Automatice el proceso de entrega con CI/CD en AWSAutomatice el proceso de entrega con CI/CD en AWS
Automatice el proceso de entrega con CI/CD en AWSAmazon Web Services LATAM
 
Microservices Design Patterns | Edureka
Microservices Design Patterns | EdurekaMicroservices Design Patterns | Edureka
Microservices Design Patterns | EdurekaEdureka!
 
Azure Application Modernization
Azure Application ModernizationAzure Application Modernization
Azure Application ModernizationKarina Matos
 
High Concurrency Architecture at TIKI
High Concurrency Architecture at TIKIHigh Concurrency Architecture at TIKI
High Concurrency Architecture at TIKINghia Minh
 
AWS vs Azure | AWS vs Azure Comparison | Difference Between AWS And Azure | S...
AWS vs Azure | AWS vs Azure Comparison | Difference Between AWS And Azure | S...AWS vs Azure | AWS vs Azure Comparison | Difference Between AWS And Azure | S...
AWS vs Azure | AWS vs Azure Comparison | Difference Between AWS And Azure | S...Simplilearn
 
Overview of Azure Arc enabled Kubernetes
Overview of Azure Arc enabled KubernetesOverview of Azure Arc enabled Kubernetes
Overview of Azure Arc enabled KubernetesPieter de Bruin
 
Apache Kafka as Event Streaming Platform for Microservice Architectures
Apache Kafka as Event Streaming Platform for Microservice ArchitecturesApache Kafka as Event Streaming Platform for Microservice Architectures
Apache Kafka as Event Streaming Platform for Microservice ArchitecturesKai Wähner
 

What's hot (20)

DevOps 101
DevOps 101DevOps 101
DevOps 101
 
CQRS and Event Sourcing
CQRS and Event Sourcing CQRS and Event Sourcing
CQRS and Event Sourcing
 
Design patterns for microservice architecture
Design patterns for microservice architectureDesign patterns for microservice architecture
Design patterns for microservice architecture
 
Introduction to Event Sourcing
Introduction to Event SourcingIntroduction to Event Sourcing
Introduction to Event Sourcing
 
Developing event-driven microservices with event sourcing and CQRS (svcc, sv...
Developing event-driven microservices with event sourcing and CQRS  (svcc, sv...Developing event-driven microservices with event sourcing and CQRS  (svcc, sv...
Developing event-driven microservices with event sourcing and CQRS (svcc, sv...
 
Microservice Architecture
Microservice ArchitectureMicroservice Architecture
Microservice Architecture
 
Software architecture for high traffic website
Software architecture for high traffic websiteSoftware architecture for high traffic website
Software architecture for high traffic website
 
IoT & Azure (EventHub)
IoT & Azure (EventHub)IoT & Azure (EventHub)
IoT & Azure (EventHub)
 
CQRS
CQRSCQRS
CQRS
 
Developing Terraform Modules at Scale - HashiTalks 2021
Developing Terraform Modules at Scale - HashiTalks 2021Developing Terraform Modules at Scale - HashiTalks 2021
Developing Terraform Modules at Scale - HashiTalks 2021
 
Azure Web Apps - Introduction
Azure Web Apps - IntroductionAzure Web Apps - Introduction
Azure Web Apps - Introduction
 
Event Sourcing & CQRS, Kafka, Rabbit MQ
Event Sourcing & CQRS, Kafka, Rabbit MQEvent Sourcing & CQRS, Kafka, Rabbit MQ
Event Sourcing & CQRS, Kafka, Rabbit MQ
 
Infrastructure as Code for Beginners
Infrastructure as Code for BeginnersInfrastructure as Code for Beginners
Infrastructure as Code for Beginners
 
Automatice el proceso de entrega con CI/CD en AWS
Automatice el proceso de entrega con CI/CD en AWSAutomatice el proceso de entrega con CI/CD en AWS
Automatice el proceso de entrega con CI/CD en AWS
 
Microservices Design Patterns | Edureka
Microservices Design Patterns | EdurekaMicroservices Design Patterns | Edureka
Microservices Design Patterns | Edureka
 
Azure Application Modernization
Azure Application ModernizationAzure Application Modernization
Azure Application Modernization
 
High Concurrency Architecture at TIKI
High Concurrency Architecture at TIKIHigh Concurrency Architecture at TIKI
High Concurrency Architecture at TIKI
 
AWS vs Azure | AWS vs Azure Comparison | Difference Between AWS And Azure | S...
AWS vs Azure | AWS vs Azure Comparison | Difference Between AWS And Azure | S...AWS vs Azure | AWS vs Azure Comparison | Difference Between AWS And Azure | S...
AWS vs Azure | AWS vs Azure Comparison | Difference Between AWS And Azure | S...
 
Overview of Azure Arc enabled Kubernetes
Overview of Azure Arc enabled KubernetesOverview of Azure Arc enabled Kubernetes
Overview of Azure Arc enabled Kubernetes
 
Apache Kafka as Event Streaming Platform for Microservice Architectures
Apache Kafka as Event Streaming Platform for Microservice ArchitecturesApache Kafka as Event Streaming Platform for Microservice Architectures
Apache Kafka as Event Streaming Platform for Microservice Architectures
 

Viewers also liked

Sofware Fora de Séria 2016 - Implementando realtime no frontend
Sofware Fora de Séria 2016 - Implementando realtime no frontendSofware Fora de Séria 2016 - Implementando realtime no frontend
Sofware Fora de Séria 2016 - Implementando realtime no frontendWilliam Seiti Mizuta
 
DDD Basics: Bounded Contexts, Modelling - Kortrijk Edition
DDD Basics: Bounded Contexts, Modelling - Kortrijk EditionDDD Basics: Bounded Contexts, Modelling - Kortrijk Edition
DDD Basics: Bounded Contexts, Modelling - Kortrijk EditionMathias Verraes
 
DDD Modeling Workshop
DDD Modeling WorkshopDDD Modeling Workshop
DDD Modeling WorkshopDennis Traub
 
Strategic Appplication Development with Domain-Driven Design (DDD)
Strategic Appplication Development with Domain-Driven Design (DDD)Strategic Appplication Development with Domain-Driven Design (DDD)
Strategic Appplication Development with Domain-Driven Design (DDD)Dennis Traub
 
Common ddd pitfalls
Common ddd pitfallsCommon ddd pitfalls
Common ddd pitfallsTom Janssens
 
Strategic design using ddd
Strategic design using dddStrategic design using ddd
Strategic design using dddPaul Rayner
 
Driven Development - Closing the Loop on Scrum
Driven Development - Closing the Loop on ScrumDriven Development - Closing the Loop on Scrum
Driven Development - Closing the Loop on ScrumAdam Englander
 
Package and distribute your Python code
Package and distribute your Python codePackage and distribute your Python code
Package and distribute your Python codeSanket Saurav
 
S.O.L.I.D. - Павел Кохан, Python Meetup 26.09.2014
S.O.L.I.D. - Павел Кохан, Python Meetup 26.09.2014S.O.L.I.D. - Павел Кохан, Python Meetup 26.09.2014
S.O.L.I.D. - Павел Кохан, Python Meetup 26.09.2014Python Meetup
 
ZCA: A component architecture for Python
ZCA: A component architecture for PythonZCA: A component architecture for Python
ZCA: A component architecture for PythonTimo Stollenwerk
 
Hexagonal Design in Django
Hexagonal Design in DjangoHexagonal Design in Django
Hexagonal Design in Djangomvschaik
 
Postgres performance for humans
Postgres performance for humansPostgres performance for humans
Postgres performance for humansCraig Kerstiens
 
Moving from Django Apps to Services
Moving from Django Apps to ServicesMoving from Django Apps to Services
Moving from Django Apps to ServicesCraig Kerstiens
 
Introduction to hexagonal architecture
Introduction to hexagonal architectureIntroduction to hexagonal architecture
Introduction to hexagonal architectureManel Sellés
 
DDD session BrownBagLunch (FR)
DDD session BrownBagLunch (FR)DDD session BrownBagLunch (FR)
DDD session BrownBagLunch (FR)Cyrille Martraire
 
Developing Software As A Service App with Python & Django
Developing Software As A Service App with Python & DjangoDeveloping Software As A Service App with Python & Django
Developing Software As A Service App with Python & DjangoAllan Mangune
 
Code & Cannoli - Domain Driven Design
Code & Cannoli - Domain Driven DesignCode & Cannoli - Domain Driven Design
Code & Cannoli - Domain Driven DesignFrank Levering
 
Domain-driven design
Domain-driven designDomain-driven design
Domain-driven designKnoldus Inc.
 

Viewers also liked (20)

Sofware Fora de Séria 2016 - Implementando realtime no frontend
Sofware Fora de Séria 2016 - Implementando realtime no frontendSofware Fora de Séria 2016 - Implementando realtime no frontend
Sofware Fora de Séria 2016 - Implementando realtime no frontend
 
DDD Basics: Bounded Contexts, Modelling - Kortrijk Edition
DDD Basics: Bounded Contexts, Modelling - Kortrijk EditionDDD Basics: Bounded Contexts, Modelling - Kortrijk Edition
DDD Basics: Bounded Contexts, Modelling - Kortrijk Edition
 
DDD Modeling Workshop
DDD Modeling WorkshopDDD Modeling Workshop
DDD Modeling Workshop
 
Strategic Appplication Development with Domain-Driven Design (DDD)
Strategic Appplication Development with Domain-Driven Design (DDD)Strategic Appplication Development with Domain-Driven Design (DDD)
Strategic Appplication Development with Domain-Driven Design (DDD)
 
Common ddd pitfalls
Common ddd pitfallsCommon ddd pitfalls
Common ddd pitfalls
 
Strategic design using ddd
Strategic design using dddStrategic design using ddd
Strategic design using ddd
 
Driven Development - Closing the Loop on Scrum
Driven Development - Closing the Loop on ScrumDriven Development - Closing the Loop on Scrum
Driven Development - Closing the Loop on Scrum
 
Package and distribute your Python code
Package and distribute your Python codePackage and distribute your Python code
Package and distribute your Python code
 
S.O.L.I.D. - Павел Кохан, Python Meetup 26.09.2014
S.O.L.I.D. - Павел Кохан, Python Meetup 26.09.2014S.O.L.I.D. - Павел Кохан, Python Meetup 26.09.2014
S.O.L.I.D. - Павел Кохан, Python Meetup 26.09.2014
 
ZCA: A component architecture for Python
ZCA: A component architecture for PythonZCA: A component architecture for Python
ZCA: A component architecture for Python
 
Organise a Code Dojo!
Organise a Code Dojo!Organise a Code Dojo!
Organise a Code Dojo!
 
Hexagonal Design in Django
Hexagonal Design in DjangoHexagonal Design in Django
Hexagonal Design in Django
 
Python SOLID
Python SOLIDPython SOLID
Python SOLID
 
Postgres performance for humans
Postgres performance for humansPostgres performance for humans
Postgres performance for humans
 
Moving from Django Apps to Services
Moving from Django Apps to ServicesMoving from Django Apps to Services
Moving from Django Apps to Services
 
Introduction to hexagonal architecture
Introduction to hexagonal architectureIntroduction to hexagonal architecture
Introduction to hexagonal architecture
 
DDD session BrownBagLunch (FR)
DDD session BrownBagLunch (FR)DDD session BrownBagLunch (FR)
DDD session BrownBagLunch (FR)
 
Developing Software As A Service App with Python & Django
Developing Software As A Service App with Python & DjangoDeveloping Software As A Service App with Python & Django
Developing Software As A Service App with Python & Django
 
Code & Cannoli - Domain Driven Design
Code & Cannoli - Domain Driven DesignCode & Cannoli - Domain Driven Design
Code & Cannoli - Domain Driven Design
 
Domain-driven design
Domain-driven designDomain-driven design
Domain-driven design
 

Similar to Modernizando legado com Domain Driven Design e Strategic Design

TDC2016SP - Trilha Microservices
TDC2016SP - Trilha MicroservicesTDC2016SP - Trilha Microservices
TDC2016SP - Trilha Microservicestdc-globalcode
 
TDC2018SP | Trilha Microservices - Modular Monoliths - Como e possivel organi...
TDC2018SP | Trilha Microservices - Modular Monoliths - Como e possivel organi...TDC2018SP | Trilha Microservices - Modular Monoliths - Como e possivel organi...
TDC2018SP | Trilha Microservices - Modular Monoliths - Como e possivel organi...tdc-globalcode
 
TDC2018SP | Trilha Arq .Net - Serverless Reactive Programming on Azure
TDC2018SP | Trilha Arq .Net - Serverless Reactive Programming on AzureTDC2018SP | Trilha Arq .Net - Serverless Reactive Programming on Azure
TDC2018SP | Trilha Arq .Net - Serverless Reactive Programming on Azuretdc-globalcode
 
[DTC21] Thiago Lima - Do Zero ao 100 no Mundo de Microservices
[DTC21] Thiago Lima - Do Zero ao 100 no Mundo de Microservices[DTC21] Thiago Lima - Do Zero ao 100 no Mundo de Microservices
[DTC21] Thiago Lima - Do Zero ao 100 no Mundo de MicroservicesDeep Tech Brasil
 
Transformando a ti com cloud computing e virtualização
Transformando a ti com cloud computing e virtualizaçãoTransformando a ti com cloud computing e virtualização
Transformando a ti com cloud computing e virtualizaçãoDarlan Segalin
 
O desafio de sustentar centenas de servicos
O desafio de sustentar centenas de servicosO desafio de sustentar centenas de servicos
O desafio de sustentar centenas de servicosGraziella Bonizi
 
Treinamento ASP.NET 2014
Treinamento ASP.NET 2014Treinamento ASP.NET 2014
Treinamento ASP.NET 2014Eric Gallardo
 
DDD e Microsservicos - do negócio à arquitetura
DDD e Microsservicos - do negócio à arquiteturaDDD e Microsservicos - do negócio à arquitetura
DDD e Microsservicos - do negócio à arquiteturaGraziella Bonizi
 
Indo alem do_mvc_node_js
Indo alem do_mvc_node_jsIndo alem do_mvc_node_js
Indo alem do_mvc_node_jsgustavobeavis
 
Introdução a arquitetura de sistemas com .NET
Introdução a arquitetura de sistemas com .NETIntrodução a arquitetura de sistemas com .NET
Introdução a arquitetura de sistemas com .NETMário Meyrelles
 
Arquitetura web para sistemas de negócio
Arquitetura web para sistemas de negócioArquitetura web para sistemas de negócio
Arquitetura web para sistemas de negócioRalph Rassweiler
 
Estratégias de Estruturação de Código-fonte e Controlo de Versão
Estratégias de Estruturação de Código-fonte e Controlo de VersãoEstratégias de Estruturação de Código-fonte e Controlo de Versão
Estratégias de Estruturação de Código-fonte e Controlo de VersãoComunidade NetPonto
 
Entendendo Frameworks web com Python
Entendendo Frameworks web com PythonEntendendo Frameworks web com Python
Entendendo Frameworks web com PythonLuiz Aldabalde
 
Entendendo Framework Web com Python
Entendendo Framework Web com PythonEntendendo Framework Web com Python
Entendendo Framework Web com PythonPythOnRio
 

Similar to Modernizando legado com Domain Driven Design e Strategic Design (20)

TDC2016SP - Trilha Microservices
TDC2016SP - Trilha MicroservicesTDC2016SP - Trilha Microservices
TDC2016SP - Trilha Microservices
 
TDC2018SP | Trilha Microservices - Modular Monoliths - Como e possivel organi...
TDC2018SP | Trilha Microservices - Modular Monoliths - Como e possivel organi...TDC2018SP | Trilha Microservices - Modular Monoliths - Como e possivel organi...
TDC2018SP | Trilha Microservices - Modular Monoliths - Como e possivel organi...
 
TDC2018SP | Trilha Arq .Net - Serverless Reactive Programming on Azure
TDC2018SP | Trilha Arq .Net - Serverless Reactive Programming on AzureTDC2018SP | Trilha Arq .Net - Serverless Reactive Programming on Azure
TDC2018SP | Trilha Arq .Net - Serverless Reactive Programming on Azure
 
[DTC21] Thiago Lima - Do Zero ao 100 no Mundo de Microservices
[DTC21] Thiago Lima - Do Zero ao 100 no Mundo de Microservices[DTC21] Thiago Lima - Do Zero ao 100 no Mundo de Microservices
[DTC21] Thiago Lima - Do Zero ao 100 no Mundo de Microservices
 
Clean Architecture
Clean ArchitectureClean Architecture
Clean Architecture
 
Transformando a ti com cloud computing e virtualização
Transformando a ti com cloud computing e virtualizaçãoTransformando a ti com cloud computing e virtualização
Transformando a ti com cloud computing e virtualização
 
O desafio de sustentar centenas de servicos
O desafio de sustentar centenas de servicosO desafio de sustentar centenas de servicos
O desafio de sustentar centenas de servicos
 
Escalando apps com React e Type Script e SOLID
Escalando apps com React e Type Script e SOLIDEscalando apps com React e Type Script e SOLID
Escalando apps com React e Type Script e SOLID
 
Treinamento ASP.NET 2014
Treinamento ASP.NET 2014Treinamento ASP.NET 2014
Treinamento ASP.NET 2014
 
Design Patterns
Design PatternsDesign Patterns
Design Patterns
 
DDD e Microsservicos - do negócio à arquitetura
DDD e Microsservicos - do negócio à arquiteturaDDD e Microsservicos - do negócio à arquitetura
DDD e Microsservicos - do negócio à arquitetura
 
Indo alem do_mvc_node_js
Indo alem do_mvc_node_jsIndo alem do_mvc_node_js
Indo alem do_mvc_node_js
 
Oficina cake php
Oficina cake phpOficina cake php
Oficina cake php
 
Introdução a arquitetura de sistemas com .NET
Introdução a arquitetura de sistemas com .NETIntrodução a arquitetura de sistemas com .NET
Introdução a arquitetura de sistemas com .NET
 
Arquitetura web para sistemas de negócio
Arquitetura web para sistemas de negócioArquitetura web para sistemas de negócio
Arquitetura web para sistemas de negócio
 
Estratégias de Estruturação de Código-fonte e Controlo de Versão
Estratégias de Estruturação de Código-fonte e Controlo de VersãoEstratégias de Estruturação de Código-fonte e Controlo de Versão
Estratégias de Estruturação de Código-fonte e Controlo de Versão
 
Microserviços
MicroserviçosMicroserviços
Microserviços
 
Servico ad
Servico adServico ad
Servico ad
 
Entendendo Frameworks web com Python
Entendendo Frameworks web com PythonEntendendo Frameworks web com Python
Entendendo Frameworks web com Python
 
Entendendo Framework Web com Python
Entendendo Framework Web com PythonEntendendo Framework Web com Python
Entendendo Framework Web com Python
 

Modernizando legado com Domain Driven Design e Strategic Design