Arquitetura Limpa PDF

Title Arquitetura Limpa
Author Vitor Aderaldo
Pages 39
File Size 2.7 MB
File Type PDF
Total Downloads 610
Total Views 800

Summary

Arquitetura Limpa O H N U C AS R CG_Clean_Arquitecture.indb 1 15/02/2019 09:08:21 O H N U C AS R CG_Clean_Arquitecture.indb 2 15/02/2019 09:08:21 Arquitetura Limpa O Guia do Artesão para Estrutura e Design de Software O H N Robert C. Martin U C AS R Rio de Janeiro, 2019 CG_Clean_Arquitecture.indb 3 ...


Description

Accelerat ing t he world's research.

Arquitetura Limpa Vitor Aderaldo

Related papers

Download a PDF Pack of t he best relat ed papers 

Algaworks livro fullst ack angular e spring v1. Tácio Breno

Experiências com desenvolviment o ágil Vinícius De Oliveira Aguado Engenharia de soft ware conceit os e prát icas Raquel Aguiar

R

AS

C

U

N

H

O

Arquitetura Limpa

O

H

N

U

C

AS

R

Arquitetura Limpa

N

H

O

O Guia do Artesão para Estrutura e Design de Software

R

AS

C

U

Robert C. Martin

Rio de Janeiro, 2019

O

H

N

U

C

AS

R

O H

R

AS

C

U

N

Este livro é dedicado à minha amada esposa, meus quatro filhos espetaculares e suas famílias, incluindo meu kit completo com cinco netos — a grande dádiva da minha vida.

O

H

N

U

C

AS

R

Prefácio Apresentação Agradecimentos Sobre o Autor

U

N

H

O

S umário

Introdução

Capítulo 1:

O que São Design e Arquitetura?

C

Parte I:

1 3

O Objetivo? Estudo de Caso Conclusão

5 5 12

Um Conto de Dois Valores

13

Comportamento Arquitetura O Valor Maior Matriz de Eisenhower Lute pela Arquitetura

14 14 15 16 18

AS

R

Capítulo 2:

xv xix xxiii xxv

vii

Sumário

Começando com os Tijolos: Paradigmas da Programação

19

Capítulo 3:

Panorama do Paradigma

21

Programação Estruturada Programação Orientada a Objetos Programação Funcional Para Refletir Conclusão

22 22 23 23 24

Programação Estruturada

27 28 29 30 30 31 32

Encapsulamento? Herança? Polimorfismo? Conclusão

34 37 40 47

U

33

Programação Funcional

49

Quadrados de Inteiros Imutabilidade e Arquitetura Segregação de Mutabilidade Event Sourcing Conclusão

50 52 52 54 56

Parte III:

Princípios de Design

57

Capítulo 7:

SRP: O Princípio da Responsabilidade Única

61

Sintoma 1: Duplicação Acidental Sintoma 2: Fusões Soluções Conclusão

63 65 66 67

R

AS

Capítulo 6:

25

Programação Orientada a Objetos

C

Capítulo 5:

N

Prova Uma Proclamação Prejudicial Decomposição Funcional Nenhuma Prova Formal A Ciência Chega para o Resgate Testes Conclusão

H

Capítulo 4:

O

Parte II:

viii

Sumário

69

Um Experimento Mental Controle Direcional Ocultando Informações Conclusão

70 74 75 75

LSP: O Princípio de Substituição de Liskov

77

Guiando o Uso da Herança O Problema Quadrado/Retângulo LSP e a Arquitetura Exemplo de Violação do LSP Conclusão

78 79 80 80 82

O

Capítulo 9:

OCP: O Princípio Aberto/Fechado

H

Capítulo 8:

ISP e a Linguagem ISP e a Arquitetura Conclusão

N

Capítulo 10: ISP: O Princípio da Segregação de Interface

U

Capítulo 11: DIP: O Princípio da Inversão de Dependência

C

Abstrações Estáveis Factories Componentes Concretos Conclusão

83 85 86 86

87 88 89 91 91

93

Capítulo 12: Componentes

95

R

AS

Parte IV: Princípios dos Componentes

Uma Breve História dos Componentes Relocalização Ligadores Conclusão

Capítulo 13: Coesão de Componentes O Princípio da Equivalência do Reúso/Release O Princípio do Fechamento Comum O Princípio do Reúso Comum O Diagrama de Tensão para Coesão de Componentes Conclusão

96 99 100 102

103 104 105 107 109 110

ix

Sumário

Capítulo 14: Pareamento de Componentes O Princípio das Dependências Acíclicas Design de Cima para Baixo O Princípio de Dependências Estáveis O Princípio de Abstrações Estáveis Conclusão

112 118 120 126 132

Arquitetura

133

O

Parte V:

111

Capítulo 16: Independência

U

N

Desenvolvimento Implantação (Deployment) Operação Manutenção Mantendo as Opções Abertas Independência de Dispositivo Propaganda por Correspondência Endereçamento Físico Conclusão

H

Capítulo 15: O que É Arquitetura?

R

AS

C

Casos de Uso Operação Desenvolvimento Implantação Deixando as Opções Abertas Desacoplando Camadas Desacoplando os Casos de Uso Modo de Desacoplamento Desenvolvimento Independente Implantação Independente Duplicação Modos de Desacoplamento (Novamente) Conclusão

x

135 137 138 138 139 140 142 144 145 146

147 148 149 149 150 150 151 152 153 154 154 154 155 158

Sumário

Capítulo 17: Fronteiras: Estabelecendo Limites

159

O

Algumas Histórias Tristes FitNesse Quais Limites Você Deve Estabelecer e Quando? Input e Output? Arquitetura Plug-in O Argumento sobre Plug-in Conclusão

C

Nível Conclusão

U

Capítulo 19: Política e Nível

N

Cruzando Limites O Temido Monolito Componentes de Implantação Threads Processos Locais Serviços Conclusão

H

Capítulo 18: Anatomia do Limite

Capítulo 20: Regras de Negócio

AS

Entidades Casos de Uso Modelos de Request e Response Conclusão

R

Capítulo 21: Arquitetura Gritante O Tema de uma Arquitetura O Propósito de uma Arquitetura E a Web? Frameworks São Ferramentas, Não Modos de Vida Arquiteturas Testáveis Conclusão

160 163 165 169 170 172 173

175 176 176 178 179 179 180 181

183 184 187

189 190 191 193 194

195 196 197 197 198 198 199

xi

Sumário

Capítulo 22: Arquitetura Limpa

201 203 207 209

Capítulo 23: Apresentadores e Objetos Humble

211

U

Pule o Último Passo Limites Unidimensionais Fachadas Conclusão

N

Capítulo 24: Limites Parciais

Capítulo 25: Camadas e Limites

AS

C

Hunt the Wumpus Arquitetura Limpa? Cruzando os Fluxos Dividindo os Fluxos Conclusão

Capítulo 26: O Componente Main

R

O Detalhe Final Conclusão

Capítulo 27: Serviços:Grandes e Pequenos

xii

H

O Padrão de Objeto Humble Apresentadores e Visualizações Testes e Arquitetura Gateways de Base de Dados Mapeadores de Dados Service Listeners Conclusão

O

A Regra da Dependência Um Cenário Típico Conclusão

Arquitetura de Serviço? Benefícios dos Serviços? O Problema do Gato Objetos ao Resgate Serviços Baseados em Componentes Preocupações Transversais Conclusão

212 212 213 213 214 215 215

217 218 219 220 220

221 222 223 226 227 228

231 232 237

239 240 240 242 244 245 246 247

Sumário

Capítulo 28: O Limite Teste

249

Testes como Componentes do Sistema Testabilidade no Design API de Teste Conclusão

250 251 252 253

Capítulo 29: Arquitetura Limpa Embarcada

Detalhes

H

Parte VI:

O

Teste de App-tidão O Gargalo de Hardware-alvo Conclusão

255

Capítulo 30: A Base de Dados É um Detalhe

C

U

N

Bases de Dados Relacionais Por que os Sistemas de Base de Dados São Tão Predominantes? E se Não Houvesse um Disco? Detalhes Mas e o Desempenho? Anedota Conclusão

Capítulo 31: A Web É um Detalhe

AS

O Pêndulo Infinito O Desfecho Conclusão

R

Capítulo 32: Frameworks São Detalhes Autores de Framework Casamento Assimétrico Os Riscos A Solução Eu os Declaro… Conclusão

258 261 273

275 277 278 279 280 281 281 281 283

285 286 288 289

291 292 292 293 294 294 295

xiii

Sumário

Capítulo 33: Estudo de Caso: Vendas de Vídeo

297

O Produto Análise do Caso de Uso Arquitetura de Componente Gestão de Dependência Conclusão

298 299 300 302 302

303

Apêndice

U

Parte VII:

N

H

Pacote por Camada Pacote por Recurso Portas e Adaptadores Pacote por Componente O Diabo Está nos Detalhes de Implementação Organização versus Encapsulamento Outros Modos de Desacoplamento Conclusão: A Recomendação Perdida

O

Capítulo 34: O Capítulo Perdido

304 306 307 310 315 316 319 321

323 325

Índice

375

R

AS

C

Apêndice A: Arqueologia da Arquitetura

xiv

N

H

O

Prefácio

Do que estamos falando quando falamos de arquitetura?

C

U

Como qualquer metáfora, descrever software por meio das lentes da arquitetura pode esconder tanto quanto pode revelar. Pode prometer mais do que entregar e entregar mais que o prometido.

R

AS

O apelo óbvio da arquitetura é a estrutura, que domina os paradigmas e discussões sobre o desenvolvimento de software — componentes, classes, funções, módulos, camadas e serviços, micro ou macro. No entanto, muitas vezes, é difícil confirmar ou compreender a estrutura bruta de vários sistemas de software — esquemas corporativos ao estilo soviético em vias de se tornarem legado, improváveis torres de equilíbrio se estendendo em direção à nuvem, camadas arqueológicas enterradas em um slide que parece uma imensa bola de lama. Pelo jeito, a estrutura de um software não parece tão intuitiva quanto a estrutura de um prédio. Prédios têm uma estrutura física óbvia, em pedra ou concreto, com arcos altos ou largos, grande ou pequena, magnífica ou mundana. Essas estruturas têm pouca escolha além de respeitar os limites impostos pela gravidade e pelos seus materiais. Por outro lado — exceto no sentido de seriedade — o software tem pouco tempo para a gravidade. E do que o software é feito? Diferente dos prédios, que podem ser feitos de tijolos, concreto, madeira, aço e vidro, o software é feito de software.

xv

Prefácio

Grandes construções de software são compostas de componentes de software menores, que, por sua vez, são formados por componentes ainda menores de software, e assim por diante. É um código dentro do outro, do início ao fim.

N

H

O

Na arquitetura de software, por natureza, o software é recursivo, fractal e esboçado e desenvolvido em código. Os detalhes são essenciais. Também ocorre o entrelaçamento de níveis de detalhes na arquitetura de prédios, mas não faz sentido falar de escala física em software. O software tem estrutura — muitas estruturas e muitos tipos delas — e essa variedade supera o conjunto de estruturas físicas encontradas nos prédios. Você pode até argumentar de forma muito convincente que, na arquitetura de software, há mais atividade e foco no design do que na construção civil — neste sentido, não é insensato considerar a arquitetura de software mais arquitetural do que a arquitetura de prédios!

AS

C

U

Mas a escala física é algo que os humanos entendem e buscam no mundo. Embora atraentes e visualmente óbvias, caixas em um diagrama de PowerPoint não são arquitetura de sistemas de software. Sem dúvida, elas representam uma visão particular de uma arquitetura, mas confundir essas caixas com a imagem maior — com a arquitetura — é perder a imagem maior e a arquitetura: a arquitetura de software não se parece com nada. Uma visualização específica é uma escolha, não uma determinação. É uma escolha baseada em um conjunto maior de escolhas: o que incluir; o que excluir; o que enfatizar utilizando forma ou cor; o que retirar do destaque por meio da uniformização ou omissão. Não há nada natural ou intrínseco que diferencie uma visão da outra.

R

Talvez não seja muito útil falar sobre física e escala física em arquitetura de software, mas certas restrições físicas merecem a nossa consideração e atenção. A velocidade do processador e a largura de banda da rede podem fornecer um veredito duro sobre a performance de um sistema. A memória e o armazenamento podem limitar as ambições de qualquer base de código. O software pode ser feito do mesmo material que os sonhos, mas funciona no mundo físico. Nisto é que consiste a monstruosidade no amor, senhora, em ser infinita a vontade e restrita a execução; em serem limitados os desejos e o ato escravo do limite. — William Shakespeare

xvi

Prefácio

Nós e nossas empresas e economias vivemos no mundo físico. Isso nos dá uma outra perspectiva pela qual podemos entender a arquitetura do software e falar e raciocinar em termos de forças menos físicas e quantidades diferentes.

O

A arquitetura representa as decisões significativas de design que moldam um sistema, onde a significância é medida pelo custo da mudança. — Grady Booch

N

H

Tempo, dinheiro e esforço nos dão um sentido de escala para classificar o grande e o pequeno e distinguir as coisas arquiteturais do resto. Essa medida também nos diz como podemos determinar se uma arquitetura é boa ou não: uma arquitetura não deve apenas atender às demandas dos usuários, desenvolvedores e proprietários em um determinado momento, mas também corresponder a essas expectativas ao longo do tempo.

U

Se você acha que uma arquitetura boa é cara, experimente uma arquitetura ruim. — Brian Foote e Joseph Yoder

C

Os tipos de mudanças que ocorrem normalmente durante o desenvolvimento de um sistema não precisam ser caros, complexos ou abordados em projetos específicos gerenciados, fora do fluxo de trabalho diário e semanal.

R

AS

Esse ponto está ligado a um problema de importância considerável para a física: a viagem no tempo. Como podemos saber as consequências dessas mudanças típicas para que possamos adaptar as principais decisões que tomamos a respeito delas? Como podemos reduzir o esforço e o custo de desenvolvimento no futuro sem recorrer a bolas de cristal ou máquinas do tempo? A arquitetura é o conjunto de decisões que você queria ter tomado logo no início de um projeto, mas, como todo mundo, não teve a imaginação necessária. — Ralph Johnson

Se entender o passado é muito difícil e nossa compreensão do presente, no máximo, incerta, prever o futuro não é nada trivial. É aqui que a estrada se bifurca em vários caminhos.

xvii

Prefácio

Na estrada mais escura, surge a ideia de que uma arquitetura forte e estável se faz com autoridade e rigidez. Se for cara, a mudança é eliminada e suas causas são ignoradas ou atiradas em um fosso burocrático. A atuação do arquiteto é irrestrita e totalitária, e a arquitetura se transforma em uma distopia para os desenvolvedores e uma fonte de frustração constante para todos.

O

Um cheiro forte de generalidade especulativa vem de outro caminho. Essa é uma rota cheia de adivinhação codificada, incontáveis parâmetros, tumbas de código morto e mais complexidade acidental do que você poderia resolver com um orçamento de manutenção.

C

U

N

H

O caminho que nos interessa mais é o mais limpo. Nele, reconhecemos a suavidade do software e queremos preservá-lo como a principal propriedade do sistema. Admitimos que operamos com conhecimento incompleto, mas também sabemos que, como seres humanos, operar com conhecimento incompleto é o que fazemos de melhor. Nesse caminho, priorizamos os nossos pontos fortes em vez das deficiências. Criamos e descobrimos coisas. Fazemos perguntas e conduzimos experimentos. Uma arquitetura boa vem de compreendê-la mais como uma jornada do que como um destino, mais como um processo contínuo de investigação do que como um artefato congelado.

AS

A arquitetura é uma hipótese que precisa ser comprovada por implementação e medição. — Tom Gilb

R

Andar por este caminho requer cuidado e atenção, consideração e observação, prática e princípio. Em um primeiro momento, isso pode parecer lento, mas tudo depende da forma de andar. A única maneira de ir rápido, é ir bem. — Robert C. Martin

Aproveite a jornada. — Kevlin Henney Maio de 2017

xviii

N

H

O

A presentação

U

O título deste livro é Arquitetura Limpa. Trata-se de um nome audacioso. Alguns até diriam arrogante. Então, por que decidi escrever este livro e escolher esse título?

C

Escrevi minha primeira linha de código em 1964, aos 12 anos. Há mais de meio século mexo com programação. Nesse meio-tempo, aprendi algumas coisas sobre como estruturar sistemas de software — informações que, na minha opinião, outras pessoas acharão valiosas.

R

AS

Aprendi tudo isso construindo muitos sistemas, grandes e pequenos. Construí pequenos sistemas embarcados e grandes sistemas de processamento de lotes. Sistemas em tempo real e sistemas web. Aplicações de console, aplicações GUI, aplicações de controle de processo, jogos, sistemas de contabilidade, de telecomunicação, ferramentas de design, aplicações de desenho e muitos, muitos outros.

Desenvolvi aplicações single-threaded, aplicações multithreaded, aplicações com poucos processos pesados, aplicações com muitos processos leves, aplicações multiprocessadoras, aplicações de base de

xix

Apresentação

dados, aplicações matemáticas, aplicações de geometria computacional e muitos, muitos outros. Criei muitas aplicações. Construí muitos sistemas. E a dedicação com que trabalhei em todos esses projetos me ensinou algo surpreendente. As regras da arquitetura são sempre as mesmas!

H

O

Isso é surpreendente porque os sistemas que criei eram radicalmente diferentes entre si. Então, por que sistemas tão diferentes compartilham regras similares de arquitetura? Cheguei à conclusão de que as regras da arquitetura de software são independentes de todas as outras variáveis.

AS

C

U

N

Isso se torna ainda mais surpreendente quando você considera as mudanças ocorridas no hardware ao longo desse meio século. Comecei a programar em máquinas do tamanho de geladeiras que tinham tempos de ciclo de meio megahertz, 4K de memória c...


Similar Free PDFs