O documento discute a arquitetura evolucionária e o design emergente, abordando conceitos como: (1) adiar decisões até que sejam mais contextualizadas; (2) permitir que o design se adapte e mude iterativamente; e (3) focar na simplicidade e flexibilidade ao invés de um planejamento completo inicial.
Evolucionária e Design Emergente na Arquitetura de Software
1. #DNAD 2011
Examinando a
Arquitetura Evolucionária
2. Leandro Daniel @leandronet
.net Magazine Comunidade
Consultoria Autor de artigos
Desenvolvimento de software
Editor Técnico Easy .net Magazine .NET
SQL Server ClubeDelphi
Business Intelligence
Arquitetura de Software
7. Existe diferença? Conceituar
Arquitetura
Arquiteto
Design
“Projetista”
Desenvolvedor
8. Código é um dos
melhores amigos
do desenvolvedor de
software
9. Quadro branco é um dos
melhores amigos
do arquiteto de software
10. ETL
Data Integration FTP
SOA
EAI/ESB
Transaction Data Stores
(TDS/OLTP)
Master Data Store
Data Architecture Operational Data Store
Data Mart
Data Warehouse
Transactional Reporting
Design Patterns
Business Operational Reporting
Inteligence
Architectural Patterns Analytical Reporting
Master data
Master Data Hub
management
Dimensional Data
Modeling
Data Modeling
E-R Data Modeling
11. Arquitetura é aquela coisa
que é difícil de mudar depois.
Por essa razão, deve existir o
mínimo possível dessa coisa.
#DNAD11 @leandronet
12. Implementação
Design
Arquitetura
Mudanças na arquitetura são caras!
#DNAD11 @leandronet
13. O que é arquitetura evolucionária? Contexto
Evolucionária?...
Emergente?...
14. Espectro do Design de Software
Waterfall Some
clássico DUF Agile
BDUF Design XGH
Emergente
#DNAD11 @leandronet
15. Arquitetura Evolucionária e
Design Emergente
#Simples #Adaptativa
#Foco no
#Agile Cliente
#YAGNI
#Flexível #Iterativa
Design ágil não tenta ignorar design no início de um projeto ou fase. Ele tenta fazer o mínimo
possível no início do processo, quando você sabe menos sobre a verdadeira natureza do
problema.
16. Entropia do Software
Entropia é uma função de estado que cresce naturalmente durante processos naturais. Ou seja,
naturalmente, ela aumenta. Isso significa que, para manter o nível de energia, você precisará
continuar transformando trabalho.
Manter as coisas como estão, exige trabalho.
Ivar Jacobson Isaac Asimov
17. Quando um programa é modificado, sua complexidade
aumentará, a menos que alguém trabalhe
ativamente contra isso.
18. Quanto mais tempo você adiar
suas decisões...
Tempo
... Mais contextualizadas elas serão!
#DNAD11 @leandronet
19. Design Emergente
“There's no design at
the beginning. You
begin by coding a
small amount of
functionality, adding
more functionality,
and letting the design
shift and shape!”
Martin Fowler
#DNAD11 @leandronet
28. É necessário tomar essa decisão agora?
Posso adiar essa decisão com segurança?
O que posso fazer para tornar essa
decisão reversível?
#DNAD11 @leandronet
29. Toda e qualquer atividade dentro do
desenvolvimento de software é importante.
Tenha ciência do seu conhecimento (e da sua
ignorância, se possível...)
“A simplicidade consiste em subtrair o óbvio
e acrescentar o significativo” (John Maeda)
Quando em dúvida, erre pela simplicidade.
#DNAD11 @leandronet
30. Quanto mais tempo você adiar
suas decisões, mais contextualizadas elas
serão!
Pense sempre em flexibilidade.
Não lute contra as “mudanças”.
Não existe bala de prata!
#DNAD11 @leandronet