Arquitetura em Camadas PRO.NET Recife - PE Roteiro • Contextualização do problema • Descrição da solução: arquitetura em camadas proposta • Estudo de caso • Conclusões e trabalhos futuros Contexto Dicas de arquitetura em camadas para .NET de trabalhos antecedentes Facilidades nativas da plataforma .NET Desenvolver aplicações .NET com qualidade e produtividade Aproveitar código gerado pelo Visual Studio .NET Experiência em desenvolvimento de aplicações 3 camadas Requisitos • Modularidade • Facilidade de manutenção • Produtividade – – – – Dividir para conquistar Separação de conceitos Reusabilidade Extensibilidade – Custos de manutenção representam de 50% a 80% do custo total1 do software – Mudanças em uma camada não afetam as outras, desde que as interfaces sejam preservadas – Oportunidades de geração de código – Aproveitar facilidades da plataforma .NET – Em alguns casos, a produtividade foi mais importante que o purismo OO 1: J. S. Collofello and S. N. Woodfield. Evaluating the effectiveness of reliabilityassurance techniques. Journal of Systems and Software, 9(3):191-195, 1989. Arquitetura em camadas Essa camada implementa a lógica de negócio da aplicação. GUI Distribuição Fachada Controladores Cadastros Persistência Essa camada executa operações no meio de armazenamento utilizado e recupera dados utilizando serviços externos. Entidades Serviços Gerenciamento Operacional Essa camada valida as informações recebidas e utiliza a Camada de Negócio para fornecer as respostas. Também oferece serviços distribuídos. Essa camada contém serviços utilizados por outras camadas, como gerenciamento de transações. Características das camadas • Propósito geral: – Fornecer suporte para alguma camada superior – Abstrair as camadas superiores de detalhes específicos • Propósito específico: – Preocupar-se com os detalhes específicos que serão ‘escondidos’ das camadas superiores Apresentação e Distribuição Distribuição Apresentação ASP.NET XML Windows Forms HTML Web Services Javascript Persistência e Serviços Gerenciamento Operacional Negócio Apresentação • Uso de CodeBehind permite separar codificação da apresentação • Possibilidade de associar entidades a campos da tela (Databind) • Uso de controles para validar os dados de entrada (Validators) • Possibilidade de criar componentes visuais e usar componentes de terceiros • Referências: – http://www.asp.net/ – http://www.windowsforms.net/ Distribuição GUI Distribuição Negócio Persistência e Serviços Apresentação Negócio Persistência Serviços Apresentação Apresentação Camada de Negócio Controlador Cadastro Persistência e Serviços Entidade Gerenciamento Operacional Fachada Entidades - Opções Opções de implementação Vantagens Desvantagens XML Suporte a padrões, Uso de padrões de domínios, Interoperabilidade, Flexibilidade Tipos de dados, Validação, Exibição, Reconstrução, Classificação, Ordenação, Encapsulamento DataSet Flexibilidade, Serialização, Associação de controles de interface, Classificação e Filtro, Integração com XML, Disponibilidade de meta-dados, Extensibilidade Cliente usar objetos DataSet ao invés de objetos de negócio, Alto custo para instanciar e converter tipos, Encapsulamento Typed DataSet Legibilidade, Interface para cliente, Verificações em tempo de compilação Instalação, Extensibilidade, Herança, Alto custo para instanciar Classe personalizada Legibilidade, Encapsulamento, Utéis para modelagem muito complexa, Validação localizada Representa sempre única instancia, Alto custo de implementação (relacionamentos, buscas e classificações), Serialização, Extensibilidade, Instalação Classe personalizada com operações CRUD Encapsulamento, Interface para Cliente Representa sempre única instancia, Alto custo de implementação, Outros Entidades com Typed DataSet • • • • A classe DSCliente é gerada automaticamente A classe Cliente indica quais são as regras de negócios da classe DSCliente As demais classes da aplicação só referenciam a classe Cliente Cada classe Typed DataSet pode encapsular uma ou mais tabelas de um banco de dados relacional Cliente <typed dataset> RegraNegociosDados DSCliente <typed dataset> Fachada, controladores e cadastros • • • • A fachada é o ponto único de acesso a aplicação Cada cadastro contém as regras de negócios relacionadas a operações em um conjunto de entidades do mesmo tipo A fachada e os controladores agrupam regras de negócios de relação de cadastros distintos O controle de transação fica na fachada, caso exista. Se a fachada não existir, fica nos controladores Persistência e Serviços Apresentação Negócio Persistência RepositoriosDependente ControladoresAdapter Servicos Gerenciamento Operacional IRepositorios Serviços Persistência • • • Isola o resto da aplicação do mecanismo de persistência utilizado (uso de interface) Responsável por persistir os Typed DataSets No caso de bancos relacionais, não faz o mapeamento objeto-relacional CadastroContas Conta RepositorioContasObjectStore RepositorioContasAccess RepositorioContasArquivos Persistência e Serviços Apresentação Negócio Persistência e Serviços Gerenciamento Operacional Gerenciamento de Transações Gerenciamento de transações • Modo Programático: uso de comandos para iniciar, confirmar e cancelar uma transação. • Modo Declarativo: uso de atributos de métodos para indicar que determinados métodos estão dentro de um contexto transacional. Uso do Microsoft Transaction Server (MTS). Modo programático x Modo declarativo Gerenciamento de transações • Modo Programático: possui custo maior de implementação e é restrito apenas a gerenciamento de transações. • Modo Declarativo: é indicado para gerenciar processos que utilizam fontes de dados que interagem com Microsoft Distributed Transaction Coordinator (DTC). Ocasiona perda de performance. Ex.: Tirar dados de uma fila MSMQ e inseri-los num banco de dados Sql Server. Modo programático x Modo declarativo Gerenciamento de transações • Modo Programático GUI Fachada Cadastro 1 IRepositorio 1 GerenciadorTransacoes Gerenciamento de transações • Modo Declarativo GUI Fachada (Herda de objeto COM) Cadastro 1 IRepositorio 1 Microsoft Transaction Server Cenários • Cadastro: modela operações de inserção, atualização e remoção de uma entidade • Transações de negócio: modela uma operação da aplicação, como uma transferência bancária, envio de e-mail etc. • Relatório: modela uma consulta a um subconjunto do repositório de dados. Cenário Cadastro GUI Fachada Entidade <typed dataset> Cadastro 1 IRepositorio 1 Cenário Transações de negócio GUI Entidade 1 <typed dataset> Fachada Entidade 2 <typed dataset> Controlador 1 Cadastro 1 Cadastro 2 IRepositorio 1 IRepositorio 2 As classes da esquerda dependem das entidades Cenário Relatórios GUI Fachada DSRetornoRelatorio <typed dataset> Relatorios IRelatorios A consulta do relatório pode ser implementada como uma store procedure Padrões de Projeto • Abstract Factory – Para instanciação das classes de acesso ao mecanismo de persistência • Singleton – Para criar única instância da fachada, fábrica de objetos, XML de configuração • Observer – Para registrar novo evento que trata mudanças em um Typed DataSets • Facade – Classe Fachada Estudo de Caso Recife - PE IB • Subconjunto de módulo administrativo de aplicação bancária • Desenvolvido para ilustrar implementação da arquitetura em camadas • Não contempla gerenciamento de transações Cenário 1: Cadastros Cenário 2: Transações de negócio Cenário 3: Relatório Considerações finais Recife - PE Conclusões • A arquitetura em camadas sugerida traz diversos benefícios ao desenvolvimento de aplicações .NET, como modularidade e manutenabilidade • É possível aproveitar facilidades de desenvolvimento da plataforma .NET e do Visual Studio .NET para tornar o desenvolvimento produtivo • A arquitetura em camadas deve ser sempre ajustada aos requisitos da aplicação a ser construída Conclusões • A arquitetura criada é baseada na criação de documentos e não puramente na criação de objetos • A arquitetura em camadas pode sempre ser enriquecida com novas experiências Trabalhos futuros • Automatizar geração de partes da arquitetura usando Qualiti Coder • Padronizar tratamento de exceções • Tratar questões de segurança e concorrência Arquitetura em Camadas PRO.NET Recife - PE