Artigo no estilo: Curso Artigo no estilo Mentoring
Muitas vezes, por partirem de um conjunto de requisitos pequeno e sofrerem a comum pressão por entregas rápidas em prazos curtos, os desenvolvedores constroem seus sistemas com pouco ou nenhum projeto. Geralmente são utilizadas soluções de arquitetura e tecnologia simples que apenas atendem às necessidades daquele momento. Porém, naturalmente esses sistemas crescem e novas funcionalidades precisam ser implantadas, enquanto o tempo para atender às novas solicitações dos clientes continua resumido. Apesar de consciente da necessidade de refatoração no projeto, a equipe (principalmente quando é pequena e com pouca experiência) acaba por postergar essa tarefa, em alguns casos, até que ela seja imprescindível para a continuação da vida do software.
Aplicações legadas, construídas com tecnologias e arquiteturas pouco flexíveis, tendem a representar dificuldades para a equipe de desenvolvimento quando grandes manutenções são necessárias. Em certos casos é importante que a arquitetura da aplicação seja refatorada, bem como as tecnologias utilizadas sejam alteradas ou atualizadas para atender a novos requisitos do negócio.
Neste artigo veremos como realizar o refactoring completo de uma aplicação desenvolvida com a estrutura em três camadas mais comum em projetos .NET para uma arquitetura mais escalável através do DDD (Domain-Driven Design). Posteriormente o leitor poderá utilizar essa solução como template para migrar seus projetos para o DDD, inclusive visando outras arquiteturas evolutivas como microservices, e disponibilizar seus módulos em forma de serviços consumíveis.
Como cenário temos uma aplicação web de gerenciamento de tarefas desenvolvida com ASP.NET Web Forms, Entity Framework Code First e as seguintes camadas:
- DAL (Data Access Layer), que contém as entidades e a persistência, com acesso direto à base de dados;
- BLL (Business Logic Layer), a camada de negócios na qual colocamos todos os requisitos (regras de negócio) do sistema esperados pelos usuários;
- Camada de apresentação contendo o ASP.NET Web Forms. Nessa parte, no entanto, foi utilizado o Bootstrap para a construção de uma interface de usuário agradável e responsiva, o que fará com que a maior parte do nosso trabalho seja direcionada às camadas inferiores.
Utilizaremos ainda o Entity Framework Fluent API, padrões SOLID, DRY, mantendo assim algumas das melhores práticas de programação. Já na camada de apresentação vamos utilizar o ASP.NET MVC 5 com AngularJS, tudo alinhado ao que prega o DDD, com foco no domínio da aplicação.
Sistema legado: Diagrama e camadas
O sistema de gerenciamento de tarefas é legado e foi desenvolvido através de um projeto de refactoring de uma aplicação desktop diretamente para a web. O sistema estava funcionando perfeitamente e de forma estável até que os clientes começaram a solicitar alterações pertinentes, mas a arquitetura que havia não comportava tamanha evolução. Na Figura 1 temos o diagrama arquitetônico da aplicação.
Essa figura demonstra bem como ficam distribuídas as camadas no projeto e como é o fluxo de dependências entre estas. Nossa tarefa é refatorar para uma nova arquitetura, mais escalável e moderna.

Figura 1. Diagrama arquitetônico do si ...
Desbloqueie toda a DevMedia
-
+2000 artigos e vídeos
-
+40 trilhas sobre Front-end, Back-end, IA e muito mais
-
+5000 exercícios práticos
-
Mentorias ao vivo individuais