Alura > Cursos de Programação > Cursos de .NET > Conteúdos de .NET > Primeiras aulas do curso Arquitetura .NET: descomplicando a Clean Architecture

Arquitetura .NET: descomplicando a Clean Architecture

A arquitetura do projeto ContainRs - Apresentação

Boas-vindas ao curso de arquitetura limpa de .NET (pronuncia-se "dótineti") aqui da Alura. Eu sou Daniel Portugal, instrutor e desenvolvedor .NET, e te guiarei ao longo desses conteúdos.

Audiodescrição: Daniel se identifica como um homem branco. Possui cabelos pretos curtos, olhos castanhos, barba por fazer e bigode. No rosto, usa óculos de grau quadrado. No corpo, veste uma camiseta laranja. Ao fundo, há uma parede iluminada em tons de azul, um guarda roupa de madeira no centro e um baixo acústico à direita.

Pré-requisitos

Para absorver melhor os conteúdos deste curso, é necessário ter conhecimento de:

Também é importante:

O que aprenderemos?

Primeiro, estabeleceremos uma base fundamentada sobre a definição de arquitetura de software, seus benefícios e a importância de ter uma arquitetura de software bem definida em um projeto. Em seguida, abordaremos o tema principal, que é a arquitetura limpa. Vamos entender seus componentes, como eles interagem entre si e quais regras precisamos seguir para manter essa arquitetura limpa.

Com isso, teremos um projeto de software mais fácil de desenvolver, manter e muito mais econômico para o time e para a empresa em que estivermos trabalhando. Conforme o padrão da Alura, trabalharemos todos esses conceitos, teorias e assuntos de forma prática. Faremos parte de um time de desenvolvimento de um sistema de aluguel de contêineres.

Realizando atividades

Não ficaremos apenas nos vídeos. Eles são importantes, mas também temos exercícios que complementam e aprofundam alguns temas. Portanto, não deixe de ler e realizar todas as atividades.

Também contamos com o apoio do fórum do curso e uma comunidade no Discord que é bastante ativa. Gostaríamos muito de ver vocês lá, fazendo perguntas e enviando sugestões para que possamos melhorar cada vez mais nossos cursos.

Próximos passos

No próximo vídeo, é hora de começar a estudar de fato a arquitetura limpa.

A arquitetura do projeto ContainRs - Conhecendo o projeto

A empresa ContainRs nos contratou como pessoas desenvolvedoras. O negócio dessa empresa é o aluguel de contêineres, caixas de aço usadas para residências, escritórios e eventos. Eles possuem um sistema que realiza a manutenção dos seus processos.

Neste curso, vamos trabalhar com apenas uma parte desse sistema, que é o registro das pessoas clientes interessadas no aluguel. Abaixo, temos o formulário de registro, que contém bastante informações para estudos.

Tela de registro do sistema da empresa ContainRs, com fundo claro. No canto superior esquerdo, há um ícone de uma silhueta de pessoa ao lado do texto 'Registro' em negrito. No canto superior direito, há o ícone de um contêiner. Abaixo, há campos para preencher com 'Nome (*)', 'E-mail (*)', 'CPF (*)', 'Celular', 'CEP', 'Rua', 'Número', 'Complemento', 'Bairro', 'Município' e 'Estado'. Todos os campos têm um campo reservado para inserir informações, exibindo textos em seu interior, como 'Digite seu nome completo', 'Digite seu melhor e-mail', e formatação de exemplo para CPF e celular. No canto inferior esquerdo, há um botão azul escuro com a palavra 'Registrar' em branco.

Vamos acessar essa tela e cadastrar uma pessoa como exemplo, preenchendo campos como "Nome", "E-mail", "CPF", "Celular" e "Endereço". Ao clicar no botão "Registrar", a caixa de diálogo abaixo substituirá a tela de registro:

'Caixa de diálogo, com fundo claro. O texto 'Registro efetuado com sucesso!' é exibido, com um ícone verde de polegar para cima à sua direita. Abaixo do texto, há um botão e o texto 'Novo Registro'

Com isso, a pessoa terá sido cadastrada no banco de dados e receberá uma mensagem de sucesso. Caso desejado, é possível clicar no botão "Novo Registro" nessa caixa para retornar ao formulário. Este é apenas um exemplo de formulário de registro para trabalhar no curso.

Explorando a solução no Visual Studio

Como pessoas desenvolvedoras, somos curiosas, especialmente ao assumir o papel de desenvolver e evoluir um projeto. Temos interesse em entender como a solução está definida. Vamos abrir o projeto no Visual Studio para examinar essa solução.

No Visual Studio, focaremos na visão da aba "Gerenciador de Soluções", localizada na lateral esquerda. Em seu interior, temos a seguinte estrutura:

Estrutura do projeto

A solução se chama "ContainRs" e contém um projeto chamado "ContainRs.WebApp", que é a aplicação web com o formulário de registro e todo o código associado. Este projeto está organizado em pastas, como "Properties", "Controllers", "Data", "Models" e "Services". Há também uma pasta especial para aplicações web, a "wwwroot", que, embora não tenha o ícone de uma pasta comum, é uma pasta no sistema de arquivos.

Além disso, há dois arquivos na raiz do projeto: appset.json e program.cs. Dentro das pastas, encontramos arquivos C# e outros tipos de arquivos.

Compreendendo a arquitetura do software

Ao analisar uma solução, observamos a organização de suas pastas, o que é importante para definir a arquitetura. Vamos discutir algumas definições de arquitetura para fundamentar nosso estudo.

A primeira definição de arquitetura, do dicionário Michaelis, refere-se à construção civil, descrevendo arquitetura como:

"(…) modo como se dispõem as partes ou os elementos de um edifício (…), tendo em vista a criação de espaços agradáveis (…)"

Uma definição mais genérica é:

"(…) estrutura, disposição e organização de um conjunto geralmente harmônico."

No contexto de software, segundo Robert C. Martin, autor do livro Arquitetura Limpa, a arquitetura de software é:

"(…) a divisão em componentes, o arranjo desses componentes e as formas como eles se comunicam entre si."

As três definições destacam componentes e sua comunicação, com o objetivo de trazer harmonia e utilidade ao conjunto.

Próximos passos

Voltando ao Visual Studio, vamos entender as partes da aplicação web "ContainRs.WebApp", que está arquitetada em "Controllers", "Data", "Models", "Views" e "Services". Outros arquivos também contribuem para a harmonia e interação entre essas partes.

Discutiremos essa comunicação entre as partes a seguir.

A arquitetura do projeto ContainRs - Garantindo que clientes tenham mais de 18 anos

Já conhecemos a definição de arquitetura de software e agora vamos continuar essa reflexão, trazendo um problema prático.

Recebemos uma demanda para incluir um novo campo em um formulário de registro, de modo que apenas pessoas clientes com mais de 18 anos possam ser registradas. A solução poderia ser:

Após definir as possibilidades, vamos supor que decidamos adicionar um campo de nascimento. Precisamos, então, partir para a implementação.

Conhecendo a estrutura do código

Voltaremos ao Visual Studio, com a aba do gerenciador de soluções aberta. Após pesquisar, perceberemos que, para adicionar um campo que aparecerá no navegador, é necessário escrever um HTML. Esses arquivos HTML estão na pasta "Views". Dentro dessa pasta, o formulário está no arquivo index.cshtml, localizado na subpasta "Registro".

Ao acessar o arquivo index.cshtml, notaremos que o formulário de registro contém divs com campos como e-mail, CPF, celular e endereço. Nessa região, adicionaríamos outra div com o campo de nascimento, definindo-o como obrigatório.

Além disso, temos que usar essa informação, pois não podemos permitir o salvamento de informações de pessoas menores de 18 anos no banco. Por isso, precisamos encontrar o código C Sharp para implementar essa regra de negócio.

Realizando pesquisas, podemos descobrir que o código que grava informações do formulário no banco de dados está dentro da pasta "Controllers", no arquivo RegistroController.cs. Ao acessar esse arquivo, notaremos a classe RegistroController, que herda de Controller, dentro da qual á o método CreateAsync(), que valida o formulário e persiste o objeto Cliente criado.

Usaríamos a informação da data de nascimento neste trecho, definindo se a gravação dos dados deve ocorrer ou não.

Ao explorar a organização dos arquivos, conforme o processo realizado acima, notaremos que é uma prática útil navegar e entender como os elementos estão estruturados, especialmente quando não conhecemos bem a arquitetura do projeto. Após definir a solução e antes de iniciar a implementação, quanto mais soubermos sobre a localização dos componentes com os quais trabalharemos, mais o nosso trabalho é facilitado e o esforço, minimizado.

Impactando o desenvolvimento com a arquitetura de software

Vamos recapitular os benefícios de trabalhar com uma arquitetura de software bem definida. Boas arquiteturas tornam o sistema:

  1. Fácil de entender — ao abrir a solução, identificamos cada parte e função da aplicação;
  2. Fácil de desenvolver — soubemos rapidamente o que codificar e onde implementar os códigos;
  3. Fácil de manter — caso um bug aparecer, poderemos corrigi-lo rapidamente após identificar a causa;
  4. Fácil de entregar — a arquitetura de infraestrutura do projeto, dividida em banco de dados e aplicação web, facilita a publicação da aplicação.

Ao abordar códigos mal-organizados, usamos o termo "código macarrônico", por ter uma estrutura "emaranhada", sem identificação clara de onde começam e terminam as responsabilidades. Por outro lado, para códigos bem-organizados, usamos o termo "código transparente", pois ao consultá-los, sabemos exatamente o que fazer e quais serão os resultados da ação.

Nenhum código é totalmente organizado ou desorganizado. Há um espectro que posiciona os projetos entre "macarrônico" e "transparente". Entretanto, definir uma boa arquitetura, com componentes e regras claras, levam o projeto para o lado "transparente" do espectro.

Robert C. Martin, mencionado anteriormente, sintetiza essa discussão afirmando que uma boa arquitetura leva a um código transparente, minimizando os recursos necessários para construir um sistema. Assim, atingimos o grande objetivo da arquitetura de software: facilitar o desenvolvimento e minimizar os recursos, permitindo evolução e crescimento com fluidez.

Sobre o curso Arquitetura .NET: descomplicando a Clean Architecture

O curso Arquitetura .NET: descomplicando a Clean Architecture possui 161 minutos de vídeos, em um total de 54 atividades. Gostou? Conheça nossos outros cursos de .NET em Programação, ou leia nossos artigos de Programação.

Matricule-se e comece a estudar com a gente hoje! Conheça outros tópicos abordados durante o curso:

Aprenda .NET acessando integralmente esse e outros cursos, comece hoje!

Conheça os Planos para Empresas