quarta-feira, 27 de julho de 2011

Um modelo simples de implementação em camadas

Depois de alguns meses sem postar nada, segue abaixo mais uma dica que pode simplificar a sua vida ao desenvolver uma aplicação em camadas, mas o tamanho da aplicação não justifica utilizar Design Patterns, DDD ou qualquer outra técnica mais avançada.
A idéia é implementar 3 camadas separadas e sequenciais e uma camada de elementos visuais, que é usada pelas outras 3 como transporte de dados. Fica algo mais ou menos assim:

Inteface com o usuário
- Nesta camada, não existem regras de negócio, no máximo um ou outro controle de visibilidade ou enable/disable de componente. Toda a validação é passada para a camada abaixo. A única inteligência que a interface de usuário precisa ter é saber quais campos são vinculados a quais propriedades do objeto visual.

Regras de Negócio
- Aqui moram as regras de validação e tratamento dos dados. Tudo o que a tela faz, essa camada valida e retorna se está ok. Ela não sabe qual a tecnologia de persistência de dados que você tem, portanto passa essa responsabilidade para a próxima camada.

Acesso a Dados
- Essa camada sabe qual o seu banco de dados e quais são as queries que você está utilizando para persistência de dados. Adicionalmente é ela quem sabe como preencher o seu objeto visual, que será transportado entre as camadas.

Objetos Visuais
- Essa é a camada que contem as classes que serão transportadas entre as outras camadas. Todas a conhecem e sabem como utilizar suas propriedades e métodos para cumprir suas tarefas, mas aqui só tem métodos de conversão de dados (por exemplo, converter o peso de um atleta de Kg para Libras). Essa classe não sabe se validar, nem se carregar. Quem faz esse trabalho são as outras camadas.

Essa forma de desenvolver programas não é a melhor do mundo, mas ajuda bastante ao desenvolver um sistema de pequeno a médio porte com uma organização de código bastante satisfatória. Deixe cada camada como um projeto na sua Solution de forma a garantir que somente as camadas certas se conheçam (neste caso, Interface de Usuário e Acesso a Dados não podem saber uma da existência da outra).

Para esta dica, eu tenho usado o Visual Studio 2010, mas ela pode ser aplicada em diversas tecnologias.