SlideShare uma empresa Scribd logo
1 de 47
2011 Praticando a Arquitetura Evolucionária Leandro Daniel @leandronet
Leandro Daniel @leandronet Comunidade .net Magazine Autor de artigos Consultoria Desenvolvimento de software Editor Técnico  .NET Easy.net Magazine ClubeDelphi SQL Server  Business Intelligence Arquitetura de Software Várias certificações...
http://voidpodcast.com
Agenda
Existe diferença?
Arquitetura Implementação Design @leandronet #qconsp
Arquitetura é aquela coisa que é difícil de mudar depois. Por essa razão, deve existir o mínimo possível dessa coisa. @leandronet #qconsp
c <Intermission>
c Apresentando: Um código C#!
c Essaéumaabstração do código (by NDepend) Assembly Classe Método
c
c
c c
Qual abordagem você utilizaria para fazer esse software? </Intermission>
Arquitetura e o desenvolvimento  de Software
Espectro do Design Waterfall clássico Some DUF Agile XGH Design Emergente BDUF #qconsp @leandronet
Arquitetura Evolucionária e Design Emergente #Simples #Adaptativa #Foco do cliente #Agile #YAGNI #Iterativa #Flexível #qconsp @leandronet
Design Emergente "Não existe nenhum design no início. Você começa codificando uma  pequena quantidade de funcionalidades, e vai acrescentando outras gradativamente, deixando que o design tome forma!” Martin Fowler @leandronet #qconsp
Sim, a entropia existe em software... Manter as coisas como estão,  exige trabalho! #qconsp @leandronet
Quanto mais tempo você adiar suas decisões... ...Mais contextualizadas elas serão! @leandronet #qconsp
#qconsp @leandronet
Práxis da Arquitetura Evolucionária
Dívida técnica sempre é uma vilã? Fuuuuuuu!!! Depende! OMG!! #qconsp @leandronet
Quadrante da dívida técnica “Nós não temos tempo para design” “Nós vamos lidar com as consequências” Prudente e De propósito Irresponsável e De propósito “O que são camadas?” “Agora nós sabemos que deveríamos ter feito isso” Prudente e Sem querer Irresponsável e Sem querer #qconsp @leandronet
Identificando padrões idiomáticos #qconsp @leandronet
Possibilidades no Visual Studio 2010 #qconsp @leandronet
Possibilidades no NDepend(1 de 2)
Possibilidades no NDepend(2 de 2)
Outras abstrações para  visualização de métricas: CodeCity #qconsp @leandronet
CodeCitybyCodeCity #qconsp @leandronet
JDK visto no CodeCity #qconsp @leandronet
Existem várias métricas e  combinações de uso... LOC LOCM NOC ILCC ... ABC Vamos começar do básico! :) #qconsp @leandronet
Usando a matriz de dependência do NDepend
Design Emergente pelas métricas (1 de 5) #qconsp @leandronet
Design Emergente pelas métricas (2 de 5) #qconsp @leandronet
Design Emergente pelas métricas (3 de 5) #qconsp @leandronet
Design Emergente pelas métricas (4 de 5) #qconsp @leandronet
Design Emergente pelas métricas (5 de 5) #qconsp @leandronet
Para fechar, algumas dicas importantes...
É 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? @leandronet
Toda e qualquer atividade dentro do desenvolvimento de software é importante. Pense sempre em flexibilidade. Não lute contra as “mudanças”. @leandronet
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. @leandronet
Referências Pesquise no Google por: ,[object Object]
“Martin Fowler” + Design + Enterprise
Software metrics + NDependhttp://reverb.leandrodaniel.com http://voidpodcast.com http://www.ndepend.com

Mais conteúdo relacionado

Destaque (20)

Estudo Do Meio
Estudo Do MeioEstudo Do Meio
Estudo Do Meio
 
áLbum De FotografíAs
áLbum De FotografíAsáLbum De FotografíAs
áLbum De FotografíAs
 
3 movimientos de_la_tierra_y_sus_efectos_en
3 movimientos de_la_tierra_y_sus_efectos_en3 movimientos de_la_tierra_y_sus_efectos_en
3 movimientos de_la_tierra_y_sus_efectos_en
 
A Experiência do Usuário no Mundo Móvel
A Experiência do Usuário no Mundo MóvelA Experiência do Usuário no Mundo Móvel
A Experiência do Usuário no Mundo Móvel
 
Fbapres
FbapresFbapres
Fbapres
 
Informática
InformáticaInformática
Informática
 
Colegio
ColegioColegio
Colegio
 
Mi cantante favorito
Mi cantante favoritoMi cantante favorito
Mi cantante favorito
 
Cemm
CemmCemm
Cemm
 
Diseño de photocalls en encarte impresion
Diseño de photocalls en encarte impresionDiseño de photocalls en encarte impresion
Diseño de photocalls en encarte impresion
 
M Learningtftr
M LearningtftrM Learningtftr
M Learningtftr
 
roberto ensayo
roberto ensayoroberto ensayo
roberto ensayo
 
かんたろ13
かんたろ13かんたろ13
かんたろ13
 
Anexo iiade cofisplanodecontasreferencial_com_obs
Anexo iiade cofisplanodecontasreferencial_com_obsAnexo iiade cofisplanodecontasreferencial_com_obs
Anexo iiade cofisplanodecontasreferencial_com_obs
 
Sesion 3
Sesion 3Sesion 3
Sesion 3
 
El Poder de la Palabra
El Poder de la PalabraEl Poder de la Palabra
El Poder de la Palabra
 
PresentacióN A CastañA
PresentacióN A CastañAPresentacióN A CastañA
PresentacióN A CastañA
 
El Comunitario Nº2
El Comunitario Nº2El Comunitario Nº2
El Comunitario Nº2
 
51011221038
5101122103851011221038
51011221038
 
Pymes en venezuela jose abraham!
Pymes en venezuela jose abraham!Pymes en venezuela jose abraham!
Pymes en venezuela jose abraham!
 

Semelhante a Arquitetura evolutiva e design emergente

TDC 2011 - Arquitetura Evolucionária faz sentido?
TDC 2011 - Arquitetura Evolucionária faz sentido?TDC 2011 - Arquitetura Evolucionária faz sentido?
TDC 2011 - Arquitetura Evolucionária faz sentido?Leandro Daniel
 
TDC 2011 (Florianópolis) - Entendendo a Arquitetura Evolucionária
TDC 2011 (Florianópolis) - Entendendo a Arquitetura EvolucionáriaTDC 2011 (Florianópolis) - Entendendo a Arquitetura Evolucionária
TDC 2011 (Florianópolis) - Entendendo a Arquitetura EvolucionáriaLeandro Daniel
 
TDC2018SP | Trilha Arq .Net - Clean Architecture com .NET Core 2.0
TDC2018SP | Trilha Arq .Net - Clean Architecture com .NET Core 2.0TDC2018SP | Trilha Arq .Net - Clean Architecture com .NET Core 2.0
TDC2018SP | Trilha Arq .Net - Clean Architecture com .NET Core 2.0tdc-globalcode
 
DNAD 2010 - Lightning Talk - O design emergente pelas métricas (por Leandro D...
DNAD 2010 - Lightning Talk - O design emergente pelas métricas (por Leandro D...DNAD 2010 - Lightning Talk - O design emergente pelas métricas (por Leandro D...
DNAD 2010 - Lightning Talk - O design emergente pelas métricas (por Leandro D...Leandro Daniel
 
Como encarar o desenvolvimento front-end
Como encarar o desenvolvimento front-endComo encarar o desenvolvimento front-end
Como encarar o desenvolvimento front-endJean Carlo Emer
 
Arquitetura de Software - Uma Visão Crítica
Arquitetura de Software - Uma Visão CríticaArquitetura de Software - Uma Visão Crítica
Arquitetura de Software - Uma Visão CríticaPedro Castilho
 
Hexagonal Architecture
Hexagonal ArchitectureHexagonal Architecture
Hexagonal ArchitectureLucas Moura
 
Introdução a Modelagem
Introdução a ModelagemIntrodução a Modelagem
Introdução a ModelagemRodrigo Branas
 
Erros e acertos com angular na tv bandeirantes
Erros e acertos com angular na tv bandeirantesErros e acertos com angular na tv bandeirantes
Erros e acertos com angular na tv bandeirantesMVP Microsoft
 
TDC2018SP | Trilha UX Design - Design Operations (DesOps) - mapear o trabalho...
TDC2018SP | Trilha UX Design - Design Operations (DesOps) - mapear o trabalho...TDC2018SP | Trilha UX Design - Design Operations (DesOps) - mapear o trabalho...
TDC2018SP | Trilha UX Design - Design Operations (DesOps) - mapear o trabalho...tdc-globalcode
 
TDC 2012 - Fishbowl conversation sobre Arquitetura
TDC 2012 - Fishbowl conversation sobre ArquiteturaTDC 2012 - Fishbowl conversation sobre Arquitetura
TDC 2012 - Fishbowl conversation sobre ArquiteturaLeandro Daniel
 
MVCSummit - DDD e ASP NET MVC na prática com o LiteFx
MVCSummit - DDD e ASP NET MVC na prática com o LiteFxMVCSummit - DDD e ASP NET MVC na prática com o LiteFx
MVCSummit - DDD e ASP NET MVC na prática com o LiteFxDouglas Aguiar
 
Desenvolvimento de Aplicações para Android em C# com o MonoDroid
Desenvolvimento de Aplicações para Android em C# com o MonoDroidDesenvolvimento de Aplicações para Android em C# com o MonoDroid
Desenvolvimento de Aplicações para Android em C# com o MonoDroidBruno Pires
 
Tudo o que você precisa saber sobre Scrum e Visual Studio ALM – Parte 1/2
Tudo o que você precisa saber sobre Scrum e Visual Studio ALM – Parte 1/2Tudo o que você precisa saber sobre Scrum e Visual Studio ALM – Parte 1/2
Tudo o que você precisa saber sobre Scrum e Visual Studio ALM – Parte 1/2André Dias
 
Desenvolvimento de Aplicações para Android em C# com o MonoDroid
Desenvolvimento de Aplicações para Android em C# com o MonoDroidDesenvolvimento de Aplicações para Android em C# com o MonoDroid
Desenvolvimento de Aplicações para Android em C# com o MonoDroidComunidade NetPonto
 
Dicas e Truques para aumentar sua produtividade no Visual Studio
Dicas e Truques para aumentar sua produtividade no Visual StudioDicas e Truques para aumentar sua produtividade no Visual Studio
Dicas e Truques para aumentar sua produtividade no Visual StudioLetticia Nicoli
 

Semelhante a Arquitetura evolutiva e design emergente (20)

TDC 2011 - Arquitetura Evolucionária faz sentido?
TDC 2011 - Arquitetura Evolucionária faz sentido?TDC 2011 - Arquitetura Evolucionária faz sentido?
TDC 2011 - Arquitetura Evolucionária faz sentido?
 
TDC 2011 (Florianópolis) - Entendendo a Arquitetura Evolucionária
TDC 2011 (Florianópolis) - Entendendo a Arquitetura EvolucionáriaTDC 2011 (Florianópolis) - Entendendo a Arquitetura Evolucionária
TDC 2011 (Florianópolis) - Entendendo a Arquitetura Evolucionária
 
Clean Architecture com .NET Core
Clean Architecture com .NET CoreClean Architecture com .NET Core
Clean Architecture com .NET Core
 
Arquitetura Limpa em .NET Core
Arquitetura Limpa em .NET CoreArquitetura Limpa em .NET Core
Arquitetura Limpa em .NET Core
 
TDC2018SP | Trilha Arq .Net - Clean Architecture com .NET Core 2.0
TDC2018SP | Trilha Arq .Net - Clean Architecture com .NET Core 2.0TDC2018SP | Trilha Arq .Net - Clean Architecture com .NET Core 2.0
TDC2018SP | Trilha Arq .Net - Clean Architecture com .NET Core 2.0
 
DNAD 2010 - Lightning Talk - O design emergente pelas métricas (por Leandro D...
DNAD 2010 - Lightning Talk - O design emergente pelas métricas (por Leandro D...DNAD 2010 - Lightning Talk - O design emergente pelas métricas (por Leandro D...
DNAD 2010 - Lightning Talk - O design emergente pelas métricas (por Leandro D...
 
Como encarar o desenvolvimento front-end
Como encarar o desenvolvimento front-endComo encarar o desenvolvimento front-end
Como encarar o desenvolvimento front-end
 
Arquitetura de Software - Uma Visão Crítica
Arquitetura de Software - Uma Visão CríticaArquitetura de Software - Uma Visão Crítica
Arquitetura de Software - Uma Visão Crítica
 
Hexagonal Architecture
Hexagonal ArchitectureHexagonal Architecture
Hexagonal Architecture
 
Facetas do desenvolvedor agil
Facetas do desenvolvedor agilFacetas do desenvolvedor agil
Facetas do desenvolvedor agil
 
Introdução a Modelagem
Introdução a ModelagemIntrodução a Modelagem
Introdução a Modelagem
 
Erros e acertos com angular na tv bandeirantes
Erros e acertos com angular na tv bandeirantesErros e acertos com angular na tv bandeirantes
Erros e acertos com angular na tv bandeirantes
 
TDC2018SP | Trilha UX Design - Design Operations (DesOps) - mapear o trabalho...
TDC2018SP | Trilha UX Design - Design Operations (DesOps) - mapear o trabalho...TDC2018SP | Trilha UX Design - Design Operations (DesOps) - mapear o trabalho...
TDC2018SP | Trilha UX Design - Design Operations (DesOps) - mapear o trabalho...
 
TDC 2012 - Fishbowl conversation sobre Arquitetura
TDC 2012 - Fishbowl conversation sobre ArquiteturaTDC 2012 - Fishbowl conversation sobre Arquitetura
TDC 2012 - Fishbowl conversation sobre Arquitetura
 
MVCSummit - DDD e ASP NET MVC na prática com o LiteFx
MVCSummit - DDD e ASP NET MVC na prática com o LiteFxMVCSummit - DDD e ASP NET MVC na prática com o LiteFx
MVCSummit - DDD e ASP NET MVC na prática com o LiteFx
 
Desenvolvimento de Aplicações para Android em C# com o MonoDroid
Desenvolvimento de Aplicações para Android em C# com o MonoDroidDesenvolvimento de Aplicações para Android em C# com o MonoDroid
Desenvolvimento de Aplicações para Android em C# com o MonoDroid
 
Tudo o que você precisa saber sobre Scrum e Visual Studio ALM – Parte 1/2
Tudo o que você precisa saber sobre Scrum e Visual Studio ALM – Parte 1/2Tudo o que você precisa saber sobre Scrum e Visual Studio ALM – Parte 1/2
Tudo o que você precisa saber sobre Scrum e Visual Studio ALM – Parte 1/2
 
São Paulo MuleSoft Meetups - DevOps
São Paulo MuleSoft Meetups - DevOpsSão Paulo MuleSoft Meetups - DevOps
São Paulo MuleSoft Meetups - DevOps
 
Desenvolvimento de Aplicações para Android em C# com o MonoDroid
Desenvolvimento de Aplicações para Android em C# com o MonoDroidDesenvolvimento de Aplicações para Android em C# com o MonoDroid
Desenvolvimento de Aplicações para Android em C# com o MonoDroid
 
Dicas e Truques para aumentar sua produtividade no Visual Studio
Dicas e Truques para aumentar sua produtividade no Visual StudioDicas e Truques para aumentar sua produtividade no Visual Studio
Dicas e Truques para aumentar sua produtividade no Visual Studio
 

Arquitetura evolutiva e design emergente

Notas do Editor

  1. LOC: Lines of CodeLOCM: Lack of cohesion of methods (falta de coesão entre métodos)NOC: Number of ChildrenILCC: IL cyclomatic complexityABC: Association between methods
  2. O Princípio da responsabilidade única (SRP) está ficando popular entre a Comunidade de arquitetos de software hoje em dia. O princípio afirma que: uma classe não deve ter mais de uma razão para mudar. Outra maneira de interpretar o SRP é que uma classe não deve usar também muitos diferentes tipos de outras classes. Se nós estendemos a ideia a outro nível (módulos (assemblies, namespaces e métodos), certamente, se um elemento de código está usando dezenas de outros elementos de código diferente (no mesmo nível), significa que ele tem muitas responsabilidades. Muitas vezes o termo classe Deusou componente Deusé usado para qualificar esse pedaço de código. DSM pode ajudar a identificar elementos de código com muitas responsabilidades. Esse elemento de código é representado por colunas com muitas células azuis e linhas com muitas células verdes.
  3. Um padrão que é óbvio por um DSM é a estrutura de camadas (ou seja, acíclicos estruturais). Quando a matriz é triangular, com todas as células azuis no triângulo inferior esquerdo e todas as células verdes o triângulo superior direito e, em seguida, ele mostra que a estrutura é perfeitamente em camadas. Em outras palavras, a estrutura não contém qualquer ciclo de dependência.
  4. Ciclo de dependência: Se uma estrutura contém um ciclo, o ciclo será exibido por um quadrado vermelho sobre o DSM. Podemos ver que dentro do quadrado vermelho, verdes e azuis de células são misturadas em diagonal. Existem também algumas células pretas que representam mútuo uso direto (ou seja a está usando b e b é utilizando A).
  5. Alta coesão e baixoacoplamentoAideia de alta-coesão (dentro de um componente) / baixo acoplamento (entre componentes) é popular nos dias de hoje. Mas se alguém não é possível medir e visualizar as dependências, é difícil de obter uma avaliação concreta de coesão e acoplamento. DSM é bom em apresentando alta coesão. No DSM abaixo, um agregado ao quadrado óbvio em torno a diagonal é exibido. Isso significa que os elementos envolvidos na Praça tem uma alta coesão: eles são fortemente dependentes entre si embora. Além disso, podemos ver que eles ficam em camadas como não há nenhum ciclo. Eles certamente são candidatos a ser agrupados em um artefato de pai (como um namespace ou um assembly). Por outro lado, o fato da maioria das células ao redor da Praça vazia advogar para baixo acoplamento entre elementos do quadrado e outros elementos.
  6. Elemento popular: Um elemento de código popular é usado por muitos outros elementos de código. Elementos de código populares são inevitáveis (pense na classe String, por exemplo) mas um código popular não é uma falha. Isso apenas significa que em cada base de código, existem alguns conceitos centrais representados com as classes populares.Um elemento de código popular é representado por colunas com muitas células verdes e linhas com muitas células azuis.