Baixe o app para aproveitar ainda mais
Prévia do material em texto
Arquitetura de Software : 12 Desenvolvimento de Software em Camadas Prof. Alexandre Krohn Desenvolvimento de Software em Camadas 2 Arquitetura de Software ● A modularização de código é o príncipio da construção de um software organizado, com uma manutenção facilitada. ● Mas é só o príncipio... Desenvolvimento de Software em Camadas 3 Arquitetura de Software ● Uma arquitetura de software têm por objetivo capturar e preservar as intenções dos designers sobre a estrutura e o comportamento do sistema, fornecendo assim, uma defesa contra a desintegração à medida que o software envelhece. (KRUCHTEN;OBBINK; STAFFORD, 2006). Desenvolvimento de Software em Camadas 4 Arquitetura de Software ● Começamos um software analisando seus requisitos. ● Quando possuirmos um conhecimento razoável desses requisitos, passa-se a definição da arquitetura inicial, ou arquitetura candidata ● Depois de sabermos o que fazer, vamos planejar como fazer. O ponto de partida pode ser organizar nosso software em camadas Desenvolvimento de Software em Camadas 5 O contra-exemplo: ● Um modelo que não possui uma arquitetura bem definida é representado pela ilustração abaixo ● Aplicações que evoluem sem uma arquitetura tendem mais facilmente a complexidade. Desenvolvimento de Software em Camadas 6 Organizar o software em forma de camadas ● O objetivo é organizar o software em camadas lógicas, que serão implementadas como pacotes ou namespaces. ● Através do uso de serviços e componentes será criada uma solução que aos olhos do usuário pareça monolítica, mas que fornece aos desenvolvedores a flexibilidade de evoluir os processos e funcionalidades sem causar efeitos colaterais Desenvolvimento de Software em Camadas 7 Camadas x Camadas ● Tier – Camada física – hardware ● Layer – Camada lógica - programas Layer J - 1 Layer J Layer J + 1 Layer J - 1 Layer J Layer J + 1 Layer J - 1 Layer J Layer J + 1 Layer J - 1 Layer J Layer J + 1 n Tiers 10.0.0.1 10.0.0.2 n Layers Desenvolvimento de Software em Camadas 8 Exemplo de Arquitetura Desenvolvimento de Software em Camadas 9 Funções das camadas ● User interface layer – gerencia a comunicação da aplicação com o usuário, controlando o fluxo de telas através de um workflow de interface com o usuário que usa o design pattern MVC. ● Process layer – controla onde o usuário está no processo e orquestra as atividades. Basicamente funciona como um controlador dos processos empresariais é um auxiliar da User Interface Layer e um cliente da camada de serviços; ● Services layer – executa o trabalho da aplicação em conjunto com os objetos de negócio invocando métodos, buscando dados e retornando os resultados para a camada de processos; Desenvolvimento de Software em Camadas 10 Funções das Camadas ● Object layer – contém os objetos e coleções – realizando busca de dados, transformação, cálculos e processamentos de forma geral; ● Persistence layer – isola a aplicação do banco de dados e é responsável pelas operações CRUD (create, read, update e delete). Desenvolvimento de Software em Camadas 11 Boas Práticas ● Dependência entre camadas No desenvolvimento em camadas a camada inferior jamais deve depender da camada superior. Layer J - 1 Layer J Layer J + 1 Desenvolvimento de Software em Camadas 12 Boas Práticas ● Comunicação Unidirecional Uma camada inferior jamais pode chamar a camada superior. Layer J - 1 Layer J Layer J + 1 Descem chamadas de métodos Sobem retorno de métodos e exceções Desenvolvimento de Software em Camadas 13 Boas Práticas ● Acesso entre camadas Não é permitido pular camadas, ou seja, uma camada não pode ignorar a existência de outra. Layer J - 1 Layer J Layer J + 1 Desenvolvimento de Software em Camadas 14 Distribuição de Serviços em camadas ● Com a organização da arquitetura da aplicação em camadas de serviços, obtém-se ganhos simplificando a aplicação e facilitando a manutenção. Desenvolvimento de Software em Camadas 15 Interface de serviço ● Toda funcionalidade ocultará as classes que representam sua implementação através de uma interface pública de acesso que fornece os serviços relativos a funcionalidade. Servindo como uma base para ocultar o pacote. Desenvolvimento de Software em Camadas 16 Serviços ● Serviços são por definição auto-contidos (self- contained) e modulares. Todo e qualquer serviço suporta um conjunto bem definido de interfaces. ● As interfaces devem ser diretamente relacionadas ao domínio do problema, sendo que as dependências externas para funcionamento de qualquer serviço devem ser claramente documentadas e diretamente relacionadas ao domínio. Desenvolvimento de Software em Camadas 17 Modularidade dos Serviços ● Bertrand Meyer definiu os cinco critérios para determinar se a modularidade esta adequada: – Decomposição Modular – Composição Modular – Compreensão Modular – Continuidade Modular – Proteção Modular Desenvolvimento de Software em Camadas 18 Decomposição Modular ● Refere-se ao processo de quebrar uma aplicação em unidades menores de forma recursiva até o ponto que cada unidade seja responsável por uma única função distinta. Este processo é comumente denominado de “projeto top-down”. ● O objetivo final do processo é a identificação da menor unidade de software que pode ser reusada em diferentes contextos para fornecer um determinado serviço. ● Este processo tende a ser mais focado no domínio do problema. Desenvolvimento de Software em Camadas 19 Composição Modular ● Refere-se a produção de novos serviços que são baseados na combinação de outros serviços. Normalmente refere-se a este processo como “projeto bottom-up”. ● Este processo tende a ser mais focado nas funções oferecidas pela aplicação. Tipicamente este processo é iniciado quando o processo de decomposição modular começa a não produzir mais resultados significativos. ● Recomenda-se ao final deste processo uma análise do funcionamento de cada serviço através da criação de cenários de uso com diagramas de seqüência que acessam os componentes da Object Layer. Desenvolvimento de Software em Camadas 20 Compreensão Modular ● Modular understandability : ● A assinatura do serviço deve ser simples de forma que a partir da leitura da especificação deste seja possível determinar o objetivo de cada uma das mensagens quem podem ser enviadas para o serviço sem recorrer a manuais, Simplificando o processo de encontrar e usar os serviços. (Nomes adequados nos pacotes, classes e métodos) Desenvolvimento de Software em Camadas 21 Continuidade Modular ● Mede o impacto que causará uma mudança no serviço. Se a interface do serviço não ocultar de forma apropriada detalhes de implementação do serviço ocorrerá um efeito de mudança em cascata quando alterações forem necessárias na implementação. Desenvolvimento de Software em Camadas 22 Proteção Modular ● Falhas na operação de um serviço não devem influenciar na execução de outros serviços que não sejam dependentes do serviço falho. Desenvolvimento de Software em Camadas 23 Resumo ● Não importa o processo de software usado, sempre devemos fazer um bom levantamento de requisitos ● Os requisitos ditam como deverá ser modelada a arquitetura do software ● Um bom ponto de partida é a organização do software em camadas ● Existem regras indicando como as camadas devem “conversar” ● Os requisitos ajudam a descobrir quantas e quais serão as camadas necessárias ● A organização das classes dentro das camadas e a forma como as mesmas interagem é definida pelos Princípios SOLID e os Padrões de Projeto Desenvolvimento de Software em Camadas 24 Dúvidas? Desenvolvimento de Software em Camadas 25 Referências ● https://www.devmedia.com.br/como-conciliar-agilidad e-e-arquitetura-de-software/33281 ● [RYE96] Riel, Arthur J. Object Oriented Design Heuristics, Addison-Wesley Longman, 1996 ● [MEY96] Meyer, Bertrand, Object Oriented SoftwareConstruction, Second Edition, Prentice Hall 1996. ● https://www.profissionaisti.com.br/2011/06/levantamento-de-requisitos- voce-sabe-o-que-e/ ● https://www.devmedia.com.br/tecnicas-para-levantamento-de- requisitos/9151 https://www.devmedia.com.br/como-conciliar-agilidade-e-arquitetura-de-software/33281 https://www.devmedia.com.br/como-conciliar-agilidade-e-arquitetura-de-software/33281 https://www.profissionaisti.com.br/2011/06/levantamento-de-requisitos-voce-sabe-o-que-e/ https://www.profissionaisti.com.br/2011/06/levantamento-de-requisitos-voce-sabe-o-que-e/ Slide 1 Slide 2 Slide 3 Slide 4 Slide 5 Slide 6 Slide 7 Slide 8 Slide 9 Slide 10 Slide 11 Slide 12 Slide 13 Slide 14 Slide 15 Slide 16 Slide 17 Slide 18 Slide 19 Slide 20 Slide 21 Slide 22 Slide 23 Slide 24 Slide 25
Compartilhar