Baixe o app para aproveitar ainda mais
Prévia do material em texto
Design Patterns, Estilos e Padrões Arquiteturais CAPÍTULO 1. INTRODUÇÃO PROF. GLADSTON JUNIO APARECIDO Design Patterns, Estilos e Padrões Arquiteturais AULA 1.1. INTRODUÇÃO À ARQUITETURA DE SOFTWARE PROF. GLADSTON JUNIO APARECIDO Nesta Aula ❑ Conceito de Arquitetura de Software. ❑ Importância da Arquitetura de Software. Arquitetura de Software • A definição de arquitetura de um software é muitas vezes subjetiva. • Metodologias de desenvolvimento em cascata a definem como: − Projetos iniciais que devem ser concluídos antes que qualquer código seja escrito. Arquitetura de Software • Como todas as disciplinas da Engenharia de Software, a arquitetura evolui com o surgimento de: − Novas metodologias; − Novas tecnologias. Arquitetura de Software • A ISO/IEC/IEEE 42010 define arquitetura como: “Conceitos e propriedades fundamentais de um sistema considerando seu ambiente, seus elementos, seus relacionamentos e seus princípios de projeto e evolução”. Arquitetura de Software • A definição da ISO/IEC/IEEE 42010 tem alguns pontos importantes e em comum com outras definições: − A arquitetura é a parte fundamental de software; − Um software está situado em um ambiente e sua arquitetura deve considerar as características desse ambiente; − A arquitetura deve apresentar documentos que descrevem como o sistema atenderá aos requisitos necessários. − A arquitetura deve apresentar visões distintas, focadas nos interesses dos diferentes stakeholders. Arquitetura de Software • "Arquitetura é sobre as coisas importantes. Seja o que for.“ [GAMA, Erich, et. al, 1994]. • “A arquitetura de software consiste nas primeiras decisões que são tomadas para um sistema de software e uma das mais difíceis de mudar.” [INGENO, 2018]. Arquitetura de Software • Em resumo, uma arquitetura de software define as estruturas de um sistema, que são compostas por: − Os elementos que compõem a estrutura; − Suas propriedades externas; − O relacionamento entre os elementos. Arquitetura de Software FONTE: KEELING, 2017. Importância da Arquitetura • A arquitetura é o alicerce do sistema. • Envolve multas decisões. − Muitas dessas decisões não são triviais; − Mudar algumas dessas decisões após o desenvolvimento do software pode ser extremamente complexo. • Permite gerenciar a complexidade do sistema. − Reduz o gap entre especificação e implementação. Importância da Arquitetura • Arquitetura tem a capacidade de maximizar os atributos de qualidade de um software: − Manutenibilidade; − Interoperabilidade; − Segurança; − Performance. • Impacto direto na qualidade do produto final. Importância da Arquitetura Modelo de Qualidade ISO/IEC 25010 Conclusão ✔ Arquitetura consiste de tudo o que é fundamental em um software. ✔ Envolve decisões importantes que o software atenda aos atributos de qualidade esperados. ✔ Representa decisões para simplificar o desenvolvimento, entendimento, manutenção e evolução do software. 02. 01. 03. Próxima Aula A importância do Arquiteto de Software. As principais habilidades desejáveis para um Arquiteto. Responsabilidades de um Arquiteto de Software. Design Patterns, Estilos e Padrões Arquiteturais AULA 1.2. O ARQUITETO DE SOFTWARE PROF. GLADSTON JUNIO APARECIDO Nesta aula ❑ Os papéis de um Arquiteto de Software. ❑ As habilidades necessárias para um Arquiteto. O Arquiteto de Software • As responsabilidades de um arquiteto são moldadas com base no ambiente ao qual está inserido. − Alguns times possuem um ou mais arquitetos que exercem esse papel de forma dedicada. − Outros não possuem o papel fixo de arquiteto. • Nesse caso, as responsabilidades são desempenhadas por diferentes membros equipe. O Arquiteto de Software • O arquiteto de software é uma posição única: − Ele não é o gerente do projeto, mas: • Decide quando e como o software pode ser entregue. • Determina se o software atende aos requisitos do negócio. − Ele codifica, mas define projetos mais do que algoritmos. − Ele não é administrador da infraestrutura, mas monitora e garante a operabilidade do sistema. O Arquiteto de Software FONTE: KEELING, 2017. O Arquiteto de Software • Algumas responsabilidades e características importantes de um arquiteto são: − Definir as soluções por uma perspectiva de engenharia; − Dividir o sistema e atribuir responsabilidades; − Gerenciar riscos e débitos técnicos; − Liderar e contribuir para o crescimento da equipe; − Se envolver nas questões políticas da organização; − Administrar questões relacionadas à gestão de configuração e CI/CD; − Ter uma visão holística. O Arquiteto de Software FONTE: KEELING, 2017. O Arquiteto de Software • Arquitetura é essencialmente comunicação. − Um arquiteto deve ser capaz de discutir inúmeros detalhes técnicos com a equipe e, posteriormente, apresentá-los para a alta gerência sem perder a essência da mensagem. Conclusão ✔ O arquiteto de software tem um papel único no time e no ciclo de vida de um software. ✔ Ser arquiteto requer habilidades além da capacidade técnica. ✔ Bons arquitetos devem ter uma visão holística de processos e da empresa. 01. Próxima Aula Terminologia de Arquitetura de Software. Design Patterns, Estilos e Padrões Arquiteturais AULA 1.3. TERMINOLOGIA DE ARQUITETURA DE SOFTWARE PROF. GLADSTON JUNIO APARECIDO Nesta Aula ❑ Arquitetura de referência. ❑ Arquitetura implementada. ❑ Erosão arquitetural. ❑ Arquitetura de linhas de produtos de software. Arquitetura de Referência • Arquitetura conceitual do sistema proposta pelos arquitetos e representada nas visões arquiteturais e documentos do projeto. • Define os tipos de elementos e as interações permitidas entre eles em um sistema ou em partes específicas de um sistema. • Detalha como os requisitos relacionados aos atributos de qualidade serão respeitados. Arquitetura Implementada • Corresponde ao recorte da arquitetura real de um sistema materializada em seus artefatos (código, componentes, ambientes, etc.) em um dado momento. Erosão Arquitetural • Fenômeno que ocorre quando a arquitetura implementada se distancia da arquitetura de referência na medida em que o software evolui. Linhas de produtos • Arquitetura de linhas de produtos (Software Product Lines): − Arquitetura aplicada a um conjunto de produtos (sistemas) dentro de uma organização. − Esses produtos compartilham elementos em comum como design e parte da implementação. − Alguns aspectos desses elementos em comum podem ser customizados ou estendidos em cada produto. Conclusão ✔ A arquitetura de referência é uma representação importante para o ciclo de vida de um software. ✔ O arquiteto deve gerenciar os débitos técnicos para evitar a erosão arquitetural do sistema. 02. 01. 03. Próxima Aula Padrões na Arquitetura de Software. Documentação de Padrões. Importância dos Padrões. Design Patterns, Estilos e Padrões Arquiteturais AULA 1.4. PADRÕES NA ARQUITETURA DE SOFTWARE PROF. GLADSTON JUNIO APARECIDO Nesta Aula ❑ Conceito de Padrões na Arquitetura de Software. ❑ Importância dos Padrões. ❑ Documentação de Padrões. Padrões • “Um padrão é uma entidade que descreve um problema que ocorre repetidamente em um ambiente e então descreve a essência da solução para este problema, de tal forma que você use esta solução milhões de vezes, sem nunca utilizá-la do mesmo modo.” Christopher Alexander • Pontos chaves: − Soluções reutilizáveis e amplamente testadas; − Adaptáveis; − Para problemas específicos e recorrentes. Padrões • Não são exclusividade da Engenharia de Software: − Arquitetura; − Ciência da computação; − Economia; − Telecomunicações. Padrões • São utilizados como blueprints para solução de problemas durante o ciclo de vida de um software. − Um projeto de software não é materializado do nada. − Utiliza-se o conhecimento previamente adquirido. Padrões • Existem padrõespara diversos domínios e contextos do desenvolvimento de um sistema, como: − Padrões arquiteturais; − Padrões de análise de sistemas; − Padrões de análise e armazenamento de dados; − Padrões de integração de aplicações. Importância dos Padrões • O uso de soluções comprovadas contribuem para a garantia de qualidade do sistema. • Trazer um pouco de objetividade na avaliação da qualidade de uma arquitetura. • Reduzem os riscos do projeto. Importância dos Padrões • Melhoram a comunicação das equipes. • Independentes de tecnologias ou linguagem de programação. Documentação de Padrões • Existem diferentes propostas de documentação de padrões. • Em termos gerais, um padrão deve conter: − Nome: descreve de forma suscinta o padrão; − Problema: define quando o padrão deve ser utilizado. • Deve descrever o problema e o contexto ao qual o padrão se aplica. Documentação de Padrões − Solução: descreve como o padrão propõe a resolver o problema de forma genérica. − A solução descreve: • Os elementos que constituem a solução; • Seus relacionamentos; • Suas responsabilidades e colaborações. − Não deve estar vinculada a um problema concreto e sim apresentar uma abstração que sirva como template para diferentes situações. Documentação de Padrões − Resultados e consequências: descrevem os benefícios da adoção do padrão e suas consequências. • Fundamentam as decisões de utilizar ou não o padrão. • Podem, por exemplo, descrever impactos na flexibilidade, extensibilidade, portabilidade e manutenibilidade. Documentação de Padrões Documentação de Padrões Conclusão ✔ Padrões representam soluções amplamente testadas para problemas recorrentes. ✔ Não são exclusivos da Engenharia de Software. ✔ Um padrão deve ser devidamente documentado. ✔ Contribuem para melhoria da qualidade do software e comunicação da equipe. 01. Próxima Aula Revisão do paradigma da Orientação a Objetos. Design Patterns, Estilos e Padrões Arquiteturais AULA 1.5. PARADIGMA DE PROGRAMAÇÃO ORIENTADA A OBJETOS PROF. GLADSTON JUNIO APARECIDO Nesta Aula ❑ Introdução à Programação Orientada a Objetos. ❑ Principais conceitos da O.O. ❑ Desafios da Orientação a Objetos. Orientação a Objetos (O.O.) • A estrutura de um programa é composta por um conjunto de classes. • Cada classe é responsável por um aspecto do problema a ser resolvido. • A execução do problema se dá através da interação entre objetos: − “Simulação viva do problema”. Classes • São templates que definem a representação de um domínio do problema: − Determina o estado ou dados (atributos); − Determina a estrutura das operações ou responsabilidades (métodos). Classes Objetos • Um objeto representa uma instância de uma classe. − Todo objeto deve ter uma identidade única no sistema. − Chamadas aos métodos de um objeto podem resultar em mudanças seu estado. − O consumo de um método de outro objeto é chamado de mensagem. Escopo • Existem basicamente três escopos para armazenamento de dados na OO: − Variáveis locais; − Atributos de instâncias; − Atributos de classes. • Atributos e métodos possuem modificadores de acesso que determinam quem pode acessá-los (ex.: público, privado e protegido). Coesão e Acoplamento • Coesão é sinônimo de responsabilidade única. − Uma classe deve se preocupar em cumprir sua responsabilidade de forma satisfatória e não assumir a responsabilidade de outras classes. • Acoplamento corresponde a quanto uma classe depende de outra para funcionar. − A dependência ocorre quando uma classe depende de outra para cumprir suas responsabilidades. Coesão e Acoplamento • Quanto maior é a dependência mais fortemente acoplada as classes estão. • Um nível de acoplamento elevado faz com que uma classe tenha que saber muito detalhes de outra classe para funcionar. • Devemos sempre buscar reduzir o acoplamento e aumentar a coesão. • Também se aplicam aos módulos de um sistema. Encapsulamento Encapsulamento é uma técnica que visa separar os aspectos externos de um objeto de seus detalhes internos, garantindo a integridade e consistência dos valores de seus atributos e do resultado da execução de seus métodos. Herança • Permite criar uma hierarquia de classes onde: − Classes filhas herdam atributos e métodos da classe pai; − Somente atributos e métodos públicos e protegidos são herdados. • Permite criar generalizações e especializações de um determinado conceito. • Também é caracterizado com relacionado “É um”. Herança Polimorfismo • Uma vez criado um objeto nunca muda de forma. • Apontadores ou referências podem, a cada momento, representar objetos de diferentes formas. − Entretanto, esses objetos devem ter similaridades, ou seja, uma abstração em comum. Interfaces • São utilizadas para representar responsabilidades comuns de conceitos do sistema. • Definem um contrato ou representação de um comportamento de um conceito: − Estabelece o que as implementações do conceito têm que fazer; − Mas não se preocupam em como ele o faz. Desafios da O.O. • Decompor um sistema em objetos não é trivial. − É necessário garantir o reuso, encapsulamento, flexibilidade, performance, evolução e a manutenibilidade. • Muitas vezes as práticas podem gerar conflitos. Desafios da O.O. • Representação distinta de outros paradigmas já conhecidos. • A modelagem O.O. permite qualquer representação. − Não existe um agente de categoricamente lhe afirme que algo é certo ou errado. Conclusão ✔ Na O.O. a execução do programa ocorre por meio da interação entre os objetos. ✔ O.O. possui diferentes mecanismos para promover o reuso e a abstração de conceitos do domínio do problema. ✔ Parte dos conceitos não são triviais de serem aplicados. 02. 01. 03. 04. Próxima Aula Conceito de Code Smells. Métricas para análise de código. Análise estática de código.Exemplos de Code Smells. Design Patterns, Estilos e Padrões Arquiteturais AULA 1.6. CODE SMELLS E ANALISE ESTÁTICA DE CÓDIGO PROF. GLADSTON JUNIO APARECIDO Nesta aula ❑ Conceitos de Code Smells. ❑ Exemplos de Code Smells. ❑ Métricas de análise de código. ❑ Análise estática de código. Code Smells • Indicativo de que algo pode, potencialmente, estar errado com um código. • Também conhecidos como Bad Smells ou Design Smells. • Podem ocorrer por práticas ruins de programação ou escolhas erradas de projetos. Code Smells • Quando ocorrem em nível de código contribuem para: − Aumento da complexidade do sistema; − Tornam o código difícil de entender e manter. • As vezes um code smell pode não representar um problema real. − Por isso são denominados como cheiros. • São uma das principais causas de necessidade de refatoração de código. Métricas • Muitos code smells são baseados em métricas. • Métricas podem estar relacionados ao tamanho: − Lines of Code (LOC); − Number of Attributes (NOA); − Number of Methods (NOM). • Métricas podem estar relacionados à complexidade: − Weighted Method per Class (WMC); − Lack of Cohesion in Methods (LCOM). Métricas • Métricas podem estar relacionados ao projeto: − Depth of Inheritance Tree (DIT); − Number of Children (NOC). • Avaliar a qualidade de um software com base em métricas pode não ser trivial. − Qual seria uma métrica aceitável para o tamanho de um classe? − Qual a quantidade máxima aceitável para os níveis de uma hierarquia de classes? Threshold • Uma abordagem que pode ser adotada é determinar um threshold. • Em uma análise baseada em threshold, o resultado permite determinar o quanto um atributo está acima ou abaixo do valor esperado. • Thresholds devem ser sempre monitorados e recalibrados. Threshold • A definição de um threshold pode ser feita com base em: − Referências (normas, padrões, etc.); − Benchmarks em um conjunto de sistemas; − Benchmarks de mercado; − Experiência profissional. Exemplos de Code Smells • Inappropriate naming • Comments •Dead code • Duplicate code • Primitive obsession • Large class • God class • Lazy class • Middle Ma • Data clumps • Data class • Long method Exemplos de Code Smells • Large Class: classes com muitas responsabilidades. • God Class (object): classes que fazem muito trabalho, são muito grandes ou muito complexas. • Duplicated Code: bloco de código existente em mais de um local. • Long Method: métodos com código extenso ou múltiplas responsabilidades. Exemplos de Code Smells • Divergent Change: ocorre quando uma classe de maneiras diferentes e por motivos diferentes. • Shotgun Surgery: inverso do Divergent Change, se manifesta quando uma alteração na classe X sempre resulta em alterações em outras classes. • Comentários: se manifesta quando o código se torna incompreensível sem a presença/leitura de comentários. Identificação • Existem diferentes formas de se identificar code smells. • A identificação pode ocorrer por: − Inspeção manual (code review): menos efetiva; − Análise estática de código; − Análise dinâmica de código. Identificação • A análise estática avalia os artefatos do código fonte em compile time (sem a execução do sistema). • Pode ser executada sob demanda ou incorporada em pipelines de builds de ferramentas de CI/CD. − Ex.: SonarQube (https://www.sonarqube.org/). • Referências e comportamentos dinâmicas não são capturados. https://www.sonarqube.org/ Conclusão ✔ Code Smells estão diretamente relacionados às más práticas de programação. ✔ Não necessariamente representam problemas reais. ✔ Grandes motivadores para refatoração de sistemas. ✔ Definir métricas e thresholds é fundamental para eliminar falso positivos. 01. Próxima Aula Princípios SOLID. Design Patterns, Estilos e Padrões Arquiteturais AULA 1.7. OS PRINCÍPIOS DE PROJETOS SOLID PROF. GLADSTON JUNIO APARECIDO Nesta Aula ❑ Os princípios de projetos SOLID. SOLID “Bons sistemas de software começam com código limpo. Por outro lado, se os blocos não forem bem construídos a arquitetura da construção pouco importa. Além disso, você pode fazer uma bagunça substancial com blocos bem construídos. É aqui que entram os princípios SOLID.” [ROBERT, 2017]. SOLID • Na Orientação a Objetos existem diversos conceitos importantes para a qualidade do código: − Encapsulamento; − Herança; − Interfaces; − Polimorfismo. SOLID • Os conceitos citados da O.O. por si só não garantem que o código será escrito de forma correta. • Ex.: − Uma classe pode ser criada com vários métodos que não deveriam fazer parte da classe; − A herança pode ser usada indevidamente produzindo uma hierarquia de classes equivocada. SOLID • SOLID auxilia na organização de funções e dados em classes e como interligar essas classes. − Não se limita apenas ao paradigma orientado a objetos. • Acrônimo de: − S: Single Responsibility Principle − O: Open/Closed Principle − L: Liskov Substitution Principle − I: Interface Segregation Principle − D: Dependency Inversion Principle Single Responsibility Principle (SRP) • O Single Responsibility Principle dita que uma classe deve ter uma e apenas uma responsabilidade. • Um dos princípios menos compreendidos do SOLID. − Uma responsabilidade não quer dizer que uma classe deve fazer somente uma coisa. Open/Closed Principle (OCP) • Uma classe deve ser aberta para extensão, mas fechada para modificação. − Em outras palavras, o comportamento de uma classe deve ser estendido sem que seja necessário alterá-la. • Motivo: se a classe for alterada, é bem provável que as alterações "quebrem" outras partes do sistema que estavam funcionando. Liskov Substitution Principle (LSP) • Coleção de diretrizes para criação de hierarquias de classes (herança) onde um consumidor pode usar seguramente qualquer classe ou subclasse sem que o comportamento esperado seja comprometido. Liskov Substitution Principle (LSP) FONTE: ROBERT, 2017. Interface Segregation Principle (ISP) • Segundo o ISP, consumidores de uma classes não devem ser forçados a dependerem de métodos que eles não usam. FONTE: ROBERT, 2017. Interface Segregation Principle (ISP) FONTE: ROBERT, 2017. Dependency Inversion Principle (DIP) • Para garantir a flexibilidade do sistema, as dependências no código fonte devem apontar apenas para abstrações e não para tipos concretos. • Assim como todos os princípios, não se aplica apenas às classes. Dependency Inversion Principle (DIP) • Dada a quase impossibilidade de aplicação do princípio a todas as dependências, é comum termos como exceções: − Facilitadores relacionados à sistema operacional; − Facilitadores relacionados às plataformas e linguagens. Conclusão ✔ Os princípios SOLID complementam as boas práticas da O.O. ✔ Não se aplicam somente às classes, mas também a outros artefatos do sistema. ✔ Estão presentes nas recomendas das principais arquiteturas de referência. 02. 01. Próxima Aula Conceitos do padrão Injeção de Dependência. Demonstração do padrão Injeção de Dependência. Design Patterns, Estilos e Padrões Arquiteturais AULA 1.8. INJEÇÃO DE DEPENDÊNCIA PROF. GLADSTON JUNIO APARECIDO Nesta Aula ❑ Inversion of Control (IoC). ❑ Injeção de Dependência. ❑ Demonstração. Inversion of Control (IoC) • No paradigma de programação procedural, se um bloco de código A usa um bloco de código B, o bloco A tem controle sobre o contexto de execução. • O IoC é princípio de arquitetura que propõe a inversão desse fluxo de controle. • Trata-se de um princípio abstrato. Dependency Injection (DI) • Uma das principais abordagens para redução de acoplamento entre componentes de um software. • De acordo com o DI, as dependências (services) de um componente devem ser injetadas. − As dependências deixam de ser especificadas hard-coded nos construtores ou chamadas dos componentes. Dependency Injection (DI) • A injeção das dependências deve ser realizada dinamicamente por componentes de terceiros. • Denominados IoC Containers. • Exemplos: − Unity; − Ninject; − Castle Windosr; − Autofac; − Spring; − StructureMap. Dependency Injection (DI) • DI contribui para: − O gerenciamento de mudanças futuras; − Redução da complexidade do código; − Uso de técnicas de testes unitário de código; − Criação de linhas de produtos e arquiteturas dependency free. Injeção de Dependência DEMONSTRAÇÃO Conclusão ✔ Padrão importante para as principais arquiteturas de software. ✔ Pode ser implementados em diferentes plataformas. ✔ Contribui para a aplicação efetiva de metodologias como TDD. 02. 01. Próxima Aula Importância dos Catálogos de Padrões. Principais Catálogos de Padrões. Design Patterns, Estilos e Padrões Arquiteturais CAPÍTULO 2. CATÁLOGO DE PADRÕES PROF. GLADSTON JUNIO APARECIDO Design Patterns, Estilos e Padrões Arquiteturais AULA 2.1. OS PRINCIPAIS CATÁLOGOS DE PADRÕES PROF. GLADSTON JUNIO APARECIDO Nesta Aula ❑ Classificações de padrões. ❑ Catálogo de padrões. Classificação de Padrões • Ao longo dos anos diversos estudos têm sido conduzidos com o intuito de identificar padrões. • Para facilitar o aprendizado e uso dos padrões, foram definidas algumas classificações, também denominadas catálogos. POSA • Pattern Oriented Software Archicture. • Catálogo focado em padrões para desenvolvimento de sistemas de missão-crítica. • Muito utilizado no desenvolvimento de sistemas operacionais, servidores web, middlewares, etc. POSA • Estruturação: − Layers − Pipes & Filters − BlackBoard. • Sistemas Distribuídos: − Broker − Microkernel • Sistemas Interativos: − Model View Controller − Presentation Abstraction Control POEAA • Catálogo proposto por Martin Fowler no livro Enterprise Application Architecture. • Foca em padrões para “aplicação corporativas” usando .Net e Java. POEAA • Lógica de domínio: − Domain model, service layer. • Fonte de dados: − Active record, data mapper. •Comportamento em ORM: − Unit of Work, lazy load. • Apresentação Web: − Model View Controller, page controller, template view. Outros Catálogos • Além das propostas citadas, existem diversos outros catálogos de padrões úteis para um arquiteto de software: − Gang Of Four (GoF) − Enterprise Integration Patterns (EIP) − J2EE design patterns − DDD patterns − Microservice patterns Conclusão ✔ Catálogos auxiliam o estudo e aplicações de padrões. ✔ Existem catálogos para padrões de diferentes aplicações. ✔ Arquitetos de software devem conhecer os principais catálogos de padrões. 02. 01. 03. Próxima Aula Conceitos de AntiPatterns. Importância dos AntiPatterns. Exemplos de AntiPatterns. Design Patterns, Estilos e Padrões Arquiteturais AULA 2.2. ANTIPATTERNS PROF. GLADSTON JUNIO APARECIDO Nesta Aula ❑ Conceitos de AntiPatterns. ❑ Exemplos de AntiPatterns. ❑ Importância dos AntiPatterns. AntiPatterns • Soluções ruins para problemas recorrentes de projeto e implementação. • Seus impactos em um software podem comprometer: − A compreensão; − A evolução; − A manutenção. AntiPatterns • Pode acontecer quando um colaborador: − não conhece uma solução melhor; − não tem conhecimento ou experiência suficiente para resolver um determinado tipo de problema; − aplica um padrão correto, porém, no contexto errado. Anti-Patterns • The Blob • Continuous Obsolescence • Lava Flow • Ambiguous Viewpoint • Functional Decomposition • Poltergeists • Boat Anchor • Golden Hammer • Dead End • Long parameter list • Spaghetti Code • Input Kludge AntiPatterns: Refactoring Software, Architectures, and Projects in Crisis Anti-Patterns • Os antipatterns são igualmente importantes considerando que: − Permitem mapear com eficiência uma situação geral para uma classe específica de soluções; − Fornecem experiência do mundo real no reconhecimento de problemas recorrentes na indústria de software; − Fornecem uma solução detalhada para os problemas mais comuns; − Fornecem um vocabulário comum para identificar problemas e discutir soluções. Exemplos • Spaghetti Code − Se manifesta em; • Códigos com estruturas fracas; • Códigos com falta de clareza; • Códigos comprometidos ao ponto de nem o desenvolvedor original conseguir entende- lo; • Código do violações de diversos outros antipatterns e code smells. • Códigos difíceis de manter, sem uso racional de reuso e sem possibilidades de extensão. Exemplos • RICHARDS, Mark. Microservices antipatterns and pitfalls. 1. ed. O'Reilly Media, 2016. 66 p. • KARWIN, Bill. SQL Antipatterns: Avoiding the Pitfalls of Database Programming. 1. ed. Pragmatic Bookshelf, 2010. 333 p. Conclusão ✔ AntiPatterns é um catálogo de padrões. ✔ Foco em soluções ruins, comumente encontrados em projetos e implementações de software. ✔ Contribuem para a qualidade do software de forma análoga aos padrões de outros catálogos. 02. 01. Próxima Aula Conceitos de Design Patterns. Catálogo de padrões GoF. Design Patterns, Estilos e Padrões Arquiteturais AULA 2.3. DESIGN PATTERNS PROF. GLADSTON JUNIO APARECIDO Nesta Aula ❑ Conceitualização. ❑ Design Patterns – Gang of Four. Design Patterns • Design Patterns representam soluções para problemas que ocorrem no projeto (desenho, ou estruturação) de um software. • Foco em design time e não em runtime. • Forte vínculo com o paradigma de programação orientada a objetos. Design Patterns – GoF • No contexto de padrões de projetos (design patterns), o catálogo mais famoso é conhecido como Gang of Four (GoF). − Formalizados em 1994 no livro Design Patterns Elements of Reusable Object-Oriented Software (GAMA et al, 1994); − Propõe 23 padrões divididos em três categorias: • Creational patterns; • Structural patterns; • Behavioral patterns. Creational Patterns • Abstraem os processos de criação de instância de objetos. − Disponibilizar um objeto “pronto para uso” envolve mais do que apenas instanciar uma classe. • É comum o software evoluir de forma a depender mais da composição dos objetos do que da hierarquia de classes. Creational Patterns ❑ Existem dois pontos centrais nos padrões de criação: 1) determinam quais classes concretas o sistema utiliza. 2) ocultam como as instâncias são criadas. ❑ O sistema como um todo se baseia em interfaces e classes abstratas. ❑ Adicionam flexibilidade ao projeto permitindo controlar o que é criado, quem cria, como é criado e quando deve ser criado. Structural Patterns • Focam em como classes e objetos são composto com o objetivo de formar estruturas maiores e mais complexas. • Provê soluções para, por exemplo, descrever formas de compor objetos que pode realizar novas funcionalidades definidas em tempo de execução. Behavioral Patterns • Focados em algoritmos e como os objetos atribuem responsabilidades entre si. − Ou seja, proveem padrões para problemas recorrentes na comunicação entre objetos. • Simplificam o fluxo de execução de algoritmos complexos difíceis de serem avaliados em runtime. − Mudam o foco do fluxo de execução para a interconexão dos objetos. Design Patterns – GoF FONTE: GAMA, 1994. Conclusão ✔ O catálogo de padrões GoF fornece padrões para diferentes classes de problemas de um software orientado a objetos. ✔ As soluções propostas abrangem questões relacionadas à criação de objetos até o controle do fluxo de execução. 01. Próxima Aula Demonstração dos principais design patterns de criação. Design Patterns, Estilos e Padrões Arquiteturais CAPÍTULO 3. DESIGN PATTERNS (GOF) – CREATIONAL PATTERNS PROF. GLADSTON JUNIO APARECIDO Design Patterns, Estilos e Padrões Arquiteturais AULA 3.1. ABSTRACT FACTORY PROF. GLADSTON JUNIO APARECIDO Nesta Aula ❑ Conceito do Abstract Factory. ❑ Demonstração. Abstract Factory DEMONSTRAÇÃO Conclusão ✔ Permite projetar classes e objetos que são independentes de como suas dependências são compostas e criadas. ✔ Simplifica a criação de famílias de produtos de software. ✔ Permite isolar classes concretas. 02. 01. Próxima Aula Conceitos do Factory Method. Demonstração do Factory Method. Design Patterns, Estilos e Padrões Arquiteturais AULA 3.2. FACTORY METHOD PROF. GLADSTON JUNIO APARECIDO Nesta Aula ❑ Conceito do Factory Method. ❑ Demonstração. Factory Method DEMONSTRAÇÃO Conclusão ✔ O Factory Method é um dos padrões mais utilizados do GoF. ✔ Define uma interface para criação de objetos em uma hierarquia de classes. ✔ As subclasses são responsáveis por determinar qual classe concreta será instanciada. 02. 01. Próxima Aula Conceito do Singleton. Demonstração do Singleton. Design Patterns, Estilos e Padrões Arquiteturais AULA 3.3. SINGLETON PROF. GLADSTON JUNIO APARECIDO Nesta Aula ❑ Conceitos do Singleton. ❑ Demonstração. Singleton DEMONSTRAÇÃO Conclusão ✔ Permite controlar o ciclo de vida de um objeto no sistema de forma a se determinar quantas instâncias de uma classe devem existir. ✔ Evolução das variáveis globais. 02. 01. Próxima Aula Conceito do Adapter. Demonstração do Adapter. Design Patterns, Estilos e Padrões Arquiteturais CAPÍTULO 4. DESIGN PATTERNS (GOF) – STRUCTUAL PATTERNS PROF. GLADSTON JUNIO APARECIDO Design Patterns, Estilos e Padrões Arquiteturais AULA 4.1. ADAPTER PROF. GLADSTON JUNIO APARECIDO Nesta Aula ❑ Conceitos do Adapter. ❑ Demonstração. Adapter DEMONSTRAÇÃO Conclusão ✔ Converte a interface de uma classe incompatível para uma interface reconhecida. ✔ Útil para permitir que objetos de aplicações e bibliotecas legadas se comuniquem. 02. 01. Próxima Aula Conceito do Composite. Demonstração do Composite. Design Patterns, Estilos e Padrões Arquiteturais AULA 4.2. COMPOSITE PROF. GLADSTON JUNIO APARECIDO Nesta Aula ❑ Conceitos do Composite. ❑ Demonstração. Composite DEMONSTRAÇÃO Conclusão ✔ Permite representar hierarquias do tipo todo-parte.✔ Tanto a hierarquia (composição) quanto as partes podem ser manipuladas de forma uniforme. 02. 01. Próxima Aula Conceito do Decorator. Demonstração do Decorator. Design Patterns, Estilos e Padrões Arquiteturais AULA 4.3. DECORATOR PROF. GLADSTON JUNIO APARECIDO Nesta Aula ❑ Demonstração do padrão Decorator. Decorator DEMONSTRAÇÃO Conclusão ✔ Permite adicionar novas responsabilidades a um objeto dinamicamente. ✔ Provê flexibilidade ao estender as funcionalidades de uma hierarquia de classes. 02. 01. Próxima Aula Conceito do Facade. Demonstração do Facade. Design Patterns, Estilos e Padrões Arquiteturais AULA 4.4. FACADE PROF. GLADSTON JUNIO APARECIDO Nesta Aula ❑ Demonstração do padrão Facade. Facade DEMONSTRAÇÃO Conclusão ✔ Permite unificar a interface de um conceito no sistema. ✔ Tem por objetivo tornar o sistema mais fácil de ser utilizado. 02. 01. Próxima Aula Conceito do Command. Demonstração do Command. Design Patterns, Estilos e Padrões Arquiteturais CAPÍTULO 5. DESIGN PATTERNS (GOF) – BEHAVIORAL PATTERNS PROF. GLADSTON JUNIO APARECIDO Design Patterns, Estilos e Padrões Arquiteturais AULA 5.1. COMMAND PROF. GLADSTON JUNIO APARECIDO Nesta Aula ❑ Conceitos do padrão Command. ❑ Demonstração do padrão Command. Command DEMONSTRAÇÃO Conclusão ✔ Encapsula ações em objetos. ✔ Permite ao cliente definir parâmetros para as ações. 02. 01. Próxima Aula Conceitos do Iterator. Demonstração do Iterator. Design Patterns, Estilos e Padrões Arquiteturais AULA 5.2. ITERATOR PROF. GLADSTON JUNIO APARECIDO Nesta Aula ❑ Conceitos do padrão Iterator. ❑ Demonstração do padrão Iterator. Iterator DEMONSTRAÇÃO Conclusão ✔ Unifica a forma de percorrer uma coleção. ✔ Possui implementações nas principais linguagens de programação. 02. 01. Próxima Aula Conceitos do Observer. Demonstração do Observer. Design Patterns, Estilos e Padrões Arquiteturais AULA 5.3. OBSERVER PROF. GLADSTON JUNIO APARECIDO Nesta Aula ❑ Conceitos do padrão Observer. ❑ Demonstração do padrão Observer. Observer DEMONSTRAÇÃO Conclusão ✔ Permite implementar a primitiva de comunicação Publish Subscriber a nível de objetos. 02. 01. Próxima Aula Conceitos do Template Method. Demonstração do Template Method. Design Patterns, Estilos e Padrões Arquiteturais AULA 5.4. TEMPLATE METHOD PROF. GLADSTON JUNIO APARECIDO Nesta Aula ❑ Conceitos do padrão Template Method. ❑ Demonstração do padrão Template Method. Template Method DEMONSTRAÇÃO Conclusão ✔ Permite criar um esqueleto para um algoritmo onde alguns passos são definidos pelas classes filhas. 02. 01. 03. 04. Próxima Aula Conceitos dos padrões de acesso a dados. Repository. Unit of Work.Active Record. Design Patterns, Estilos e Padrões Arquiteturais CAPÍTULO 6. PADRÕES DE ACESSO A DADOS PROF. GLADSTON JUNIO APARECIDO Design Patterns, Estilos e Padrões Arquiteturais AULA 6.1. INTRODUÇÃO PROF. GLADSTON JUNIO APARECIDO Nesta Aula ❑ Acesso a Dados. Acesso a Dados • Na arquitetura de aplicações a camada de acesso a dados é responsável por se comunicar com diversos mecanismos de persistência. • Os mecanismos de persistência podem ser: − Bancos relacionais; − NoSql; − Arquivos; − Sistemas externos; − Stream. Acesso a Dados • Em aplicações corporativas os bancos de dados relacionais são os mais utilizados; • A ampla adoção deles se deu basicamente pela linguagem SQL e pela robustez das soluções. • Em aplicações distribuídas e de larga escala outras alternativas têm sido utilizadas. Acesso a Dados • Uma das estratégias de acesso a dados mais difundidas consiste no acesso de forma ad hoc: − A gestão do acesso a fonte de dados e a tradução das operações do sistema para comandos da fonte de dados é realizada pelo desenvolvedor da aplicação. Acesso a Dados • Nas linguagens O.O., têm disso comum o uso os mecanismos de Object Relational Mapping (ORM). • Existem padrões de acesso a dados para ambos os cenários e alguns podem ser utilizados em ambos os casos. Padrões de Acesso a Dados • É muito importante conhecer e saber aplicar os padrões de acesso a dados. • As decisões tomadas no projeto da camada de acesso a dados têm alto impacto e são difíceis de serem refatoradas posteriormente. − Podem impactar não apenas o acesso aos dados propriamente dito como também como as classes de domínio são projetadas. Exemplos de Padrões • Table Data Gateway • Row Data Gateway • Active Record • Data Mapper • Unit of Work • Lazy Load • Query Object • Record Set • Repository • Identity Map • Identity Field Conclusão ✔ Acesso a dados é uma camada muito importante para a arquitetura de um software. ✔ Não representa apenas banco de dados relacionais. ✔ Decisões sobre acesso a dados possuem alto impacto. 01. Próxima Aula Conceitos de ORM. Design Patterns, Estilos e Padrões Arquiteturais AULA 6.2. OBJECT RELATIONAL MAPPING (ORM) PROF. GLADSTON JUNIO APARECIDO Nesta Aula ❑ Conceitos de ORM. Object Relational Mapping (ORM) • ORM visa abstrair e separar as particularidades das fontes de persistência das classes e regras do domínio em O.O. • A tradução das ações sobre o domínio para comandos SQL é feita por componentes específicos para esse fim. Object Relational Mapping (ORM) Objetos Herança Polimorfismo Atributos Interfaces Tabelas Colunas Linhas Views Object Relational Mapping (ORM) • Se usado adequadamente, contribui para: − Produção de comandos SQL de melhor qualidade; − Redução do possível gap técnico em relação à SQL; − Uso facilitado de técnicas avançadas de persistência; − Facilidade de flexibilização das fontes de dados. Object Relational Mapping (ORM) • Existem diferentes abordagens para viabilizar o uso efetivo da O.O. no universo dos ORM. • Permitem, por exemplo: − Trabalhar os herança e interface em classes mapeadas ao banco de dados. − Utilizados conceitos como tabelas de associação. − Compor objetos com múltiplas tabelas. Object Relational Mapping (ORM) • Exemplos: − Identity Map; − Foreign Key Mapping; − Association Table Mapping; − Dependent Mapping; − Single Table Inheritance; − Class Table Inheritance; − Concrete Table Inheritance. Object Relational Mapping (ORM) • Exemplos de bibliotecas: − Hibernate; − Nhibernate; − Dapper; − Entity Framework. Conclusão ✔ Embora SQL seja uma linguagem amplamente difundida, seus conceitos nem sempre são de conhecimento de todos da equipe. ✔ O universo da O.O. possui conceitos distintos do mundo relacional, principalmente no que tange ao relacionamento entre conceitos. ✔ ORM permitem abstrair a construção dos comandos de acesso a dados por meio de mapeamentos. 01. Próxima Aula Padrões base. Design Patterns, Estilos e Padrões Arquiteturais AULA 6.3. PADRÕES BASE PROF. GLADSTON JUNIO APARECIDO Nesta Aula ❑ Gateway. ❑ Mapper. ❑ Value Obect. ❑ Record Set. ❑ Data Transfer Objects (DTO). Gateway • Representam objetos que encapsulam à um sistema ou recurso externo. • Contribuem para o isolamento entre softwares. • Fornecem uma representação O.O. para fontes de dados baseadas em outros paradigmas. Gateway FONTE: FOWLER, 2002. Mapper • Objetos responsáveis por viabilizar a comunicação entre dois objetos independentes. • Os objetos são interligados de forma que um não tem conhecimento da existência de outro. • Base para implementação do padrão Data Mapper. Mapper FONTE: FOWLER, 2002. Value Objet • Na Orientação a Objetos existem os tipos de dados que são tratados por referência e outros por valor. • No caso dos tipos de dados tratados por referência é comum que as operações de comparação sejam baseadas em suas “identidades”. • Value Objects são pequenos objetos cuja comparação não se dá apenas pelas suas propriedades chaves. Record Set • Representações “as is”, em memória, de umaestrutura de tabelas. • Disponíveis nas principais linguagens e drivers de acesso à dados. • Por serem estruturas desconectadas, é transferir tabelas como DTO. • Auxiliam na implementação de manutenção offline de dados. Data Transfer Objects • Objetos responsáveis por transportar dados entre processos. • Suas principais funções são: − Reduzir a quantidade de chamadas de métodos; − Consolidar diferentes conceitos em um único objeto. Data Transfer Objects FONTE: FOWLER, 2002. Conclusão Os padrões bases podem ser utilizados em diversos cenários em um software. São a base para alguns dos principais padrões de acesso à dados. 01. Próxima Aula Conceitos do padrão Active Record. Design Patterns, Estilos e Padrões Arquiteturais AULA 6.4. ACTIVE RECORD PROF. GLADSTON JUNIO APARECIDO Nesta Aula ❑ Características do padrão Active Record. Active Record • Mantem os dados e comportamentos do domínio sobre a responsabilidade do mesmo objeto que realizada as operações de persistência. FONTE: FOWLER, 2002. Active Record • Apresenta uma modelagem bem próxima do banco de dados: − Um atributo para cada coluna da tabela. − Para cada linha da tabela se produz um objeto. Active Record • Disponibiliza métodos para operações do tipo: − Instanciar um objeto ou vários objetos com base no resultado de uma query; − Instanciar um objeto para persistência futura; − Sensibilizar a fonte de persistência; − Business Logic. Active Record • Outros padrões relacionados: − Identity Field − Transaction Scripts − Domain Model • Quando utilizar: − Cenários com domínios simples; − Linguagens ou plataformas com recursos limitados. Conclusão ✔ Centraliza no mesmo objeto regras de negócio, dados e regras de persistência. ✔ Apresenta uma modelagem bem próxima do banco de dados. 01. Próxima Aula Conceitos do padrão Data Mapper. Design Patterns, Estilos e Padrões Arquiteturais AULA 6.5. DATA MAPPER PROF. GLADSTON JUNIO APARECIDO Nesta Aula ❑ Conceitos do padrão Data Mapper. Data Mapper • A representação de um domínio por meio da O.O. na maioria das vezes difere da representação do domínio na fonte de persistência: − Herança e algumas coleções por ex. não existem em bancos relacionais. • O padrão Data Mapper visa criar uma camada de tradução (mapeamento) entre os dois mundos. Data Mapper FONTE: FOWLER, 2002. Data Mapper • Outros padrões relacionados: − Identity Map − Unit of Work − Record Set − Lazy Load • Quando utilizar: − Quando o modelo de objetos e o modelo de persistência precisam evoluir separadamente. − Lógicas de persistências mais complexas. Conclusão ✔ Permite abstrair e simplificar as regras de acesso a dados em cenários complexos. ✔ Separa modelo O.O. e modelo relacional. 01. Próxima Aula Conceitos do padrão Unif of Work. Design Patterns, Estilos e Padrões Arquiteturais AULA 6.6. UNIT OF WORK PROF. GLADSTON JUNIO APARECIDO Nesta Aula ❑ Conceitos do padrão Unit of Work. Unit of Work • Uma Unit of Work mantém uma coleção de objetos afetados por uma transação (a nível de negócio) e coordena a sensibilização das mudanças nesses objetos para a fonte de persistência. • É responsável por tratar eventuais problemas de concorrência. • Sua implementação depende diretamente da capacidade de rastrear o que mudou em cada objeto. Unit of Work • As regras de negócio comunicam a Unit of Work sobre as mudanças nos objetos (inclusão, alteração e remoção). • Eventualmente, objetos recuperados também podem ser armazenados na Unit of Work. • A Unit of Work não permite que os métodos de insert, update e delete na fonte de persistência sejam consumidos por objetos externos. Unit of Work • A transmissão das mudanças para a fonte de persistência ocorre por meio do consumo do método de commit da Unit of Work. • Durante sua execução são executadas: − As verificações de concorrência (pessimistics, optimistics, etc.); − Tradução das mudanças em comandos para a fonte de persistência. Unit of Work FONTE: FOWLER, 2002. Unit of Work • Outros padrões relacionados: − Domain Model − Optimistic Offline Lock − Pessimistic Offline Lock − Identity Map − Data Mapper Unit of Work • Quando utilizar: − Cenários onde se faz necessário agrupar e rastrear mudanças nos objetos antes de enviá- las para a fonte de dados; − Quando for necessário reduzir o tempo em que as conexões com a fonte de dados devem ficar abertas. Conclusão ✔ O Unit of Work visa criar, em memória, uma unidade transacional. ✔ Rastreia e armazena as mudanças comandadas pela execução o sistema e depois as reproduz na fonte de persistência. 01. Próxima Aula Conceitos do padrão Repository. Design Patterns, Estilos e Padrões Arquiteturais AULA 6.7. REPOSITORY PROF. GLADSTON JUNIO APARECIDO Nesta Aula ❑ Conceitos do padrão Repository. Repository • O padrão Data Mapper provê uma camada que isola o objetos de domínio do código de acesso a dados. • Em cenários complexos com múltiplos domínios ou consultas “pesadas”, uma camada adicional pode ser útil (repositório). • O repository funciona como uma coleção de objetos em memória. − Uma representação simplificada da fonte de dados. Repository • Nele se concentra a construção das queries. − Os objetos que desejam acessar a fonte de dados se comunicam com o repositório; − Objetos podem ser incluídos e removidos do repositório; − O repositório é quem se encarrega de acessar a fonte de dados. − Permite o reuso da lógica das queries de um domínio. • Ao contrário do Data Mapper, o repositório não expõe métodos específicos de acesso à fonte de dados. Repository FONTE: FOWLER, 2002. Repository • Outros padrões relacionados: − Data Mapper − Query Object − Metadata Mapping Repository • Quando utilizar: − Cenários com múltiplos tipos de domínio e grande variedade de queries; − Cenários com diferentes fontes de dados; − Domínios com fontes de persistência diferentes dos SGBD como XML, SOAP, REST, stream, etc. Conclusão ✔ Utilizado para cenários com queries complexas. ✔ Fornece mecanismos para flexibilizar as regras de consultas. ✔ Mantem uma coleção de dados em memória. 02. 01. Próxima Aula Arquitetura vs Design. Introdução aos estilos arquiteturais. Design Patterns, Estilos e Padrões Arquiteturais CAPÍTULO 7. ESTILOS E PADRÕES ARQUITETURAIS PROF. GLADSTON JUNIO APARECIDO Design Patterns, Estilos e Padrões Arquiteturais AULA 7.1. INTRODUÇÃO A ESTILOS E PADRÕES ARQUITETURAIS PROF. GLADSTON JUNIO APARECIDO Nesta Aula ❑ Arquitetura e Design (Projeto). ❑ Estilos e Padrões Arquiteturais. Arquitetura e Design • Um arquiteto de software precisa lidar com questões de projeto (design) e questões arquiteturais. • Mas qual a diferença entre elas? Elas são iguais? − Arquitetura tende a lidar com decisões de “alto nível” (maior impacto). − Design, em geral, representam estruturas e decisões de “baixo nível”, mas não menos importantes. Arquitetura e Design • Martin Robert (2017) faz uma comparação em relação ao planejamento da construção de uma casa. • O arquiteto toma algumas decisões de alto nível: − A forma da casa; − Sua localização no terreno; − As curvas níveis do terreno e suas elevações; − Layout e dimensões dos cômodos. Arquitetura e Design • Mas também existem outros detalhes de baixo nível: − Localização das tomadas e lâmpadas; − Orientação do sol; − Localização da caixa d'água. Arquitetura e Design • Na construção de um software também existem ambos os tipos de decisões a serem tomadas por um arquiteto. • O objetivo principal dessas decisões pode ser resumido em: “The goal of software architecture is to minimize the human resources required to build and maintain the required system.” (ROBERT, Martin. 2017). Estilos Arquiteturais • Diante disso, estilos ou padrões arquiteturais visam: − Aplicar soluções conhecidas no projeto deum software; − O intuito é garantir um ou mais atributos de qualidade previstos para o software; − Envolvem design time, runtime e conceitos. Estilos Arquiteturais • Exemplos: − Layer Pattern; − Ports and Adapters; − Pipe and Filters; − Service Oriented Architects; − Publish Subscribers; − Multi Tiers. Conclusão ✔ Estilos arquiteturais representam soluções para questões de alto nível do projeto de um software. ✔ Envolvem design time, runtime e conceitos. 02. 01. 03. Próxima Aula Conceito de arquitetura multicamadas. Vantagens de um arquitetura multicamada. Características de uma arquitetura multicamada. Design Patterns, Estilos e Padrões Arquiteturais AULA 7.2. ARQUITETURA MULTICAMADAS PROF. GLADSTON JUNIO APARECIDO Nesta Aula ❑ Conceito de Arquitetura Multicamadas. ❑ Características e vantagens de uma Arquitetura Multicamadas. Tiers vs Layers • Tier e layer representam camadas de um sistema. • Layer representa um agrupamento lógico: − Está mais ligado ao design time; − Determina a organização das funcionalidades e componentes. • Tier representa um agrupamento físico: − Está ligado ao runtime; − Determina a localização da execução dos componentes. Arquitetura Multicamadas • A abordagem mais utilizada durante a distribuição dos artefatos de um software; • As camadas são horizontais e formam uma estrutura hierárquica. • A interação entre as camadas ocorre de forma top- down. Arquitetura Multicamadas • Um exemplo clássico é a arquitetura de 3-camadas (apresentação, negócio, acesso a dados). Fonte: ebrary.net Arquitetura Multicamadas • As camadas podem ser abertas ou fechadas: − Fechadas: uma camada fechada deve direcionar o fluxo para a primeira camada logo abaixo. − Abertas: uma camada aberta pode fazer o by- pass da camada imediatamente abaixo. Vantagens • Facilita a separação de interesses; • Maior flexibilidade (baixo acoplamento); • Melhora o entendimento dos artefatos do software; • Contribui para a construção de software testáveis; • Contribui para a manutenibilidade e escalabilidade. Conclusão ✔ Camadas visam agrupar os artefatos de um software por responsabilidades. ✔ Podem ser físicas ou lógicas. 02. 01. Próxima Aula Arquitetura cliente servidor. Arquitetura N-Tier. Design Patterns, Estilos e Padrões Arquiteturais AULA 7.3. ARQUITETURA CLIENTE SERVIDOR E N-TIER PROF. GLADSTON JUNIO APARECIDO Nesta Aula ❑ Arquitetura Cliente Servidor. ❑ Arquitetura N-Tier. Arquitetura Cliente Servidor • Arquitetura mais utilizada e adaptada desde a adoção das redes de computadores. • Distribui o runtime do software em duas camadas: − Cliente. − Servidor. Arquitetura Cliente Servidor ServidorCliente Arquitetura Cliente Servidor • Podem existir mais de um cliente o por servidor. • Clientes podem solicitar dados e algoritmos do servidor. • Clientes podem ser classificados como: − Thin Clients; − Fat Clients. Arquitetura Cliente Servidor • A distribuição física dos componentes do software é (tiers) fundamental para o seu sucesso. − Tem impacto direto em atributos de qualidade como escalabilidade e disponibilidade, fundamentais para aplicações modernas. Arquitetura N-Tier • A arquitetura multicamadas N-Tier ou Multitier distribui o runtime do software em três ou mais camadas. Business TierPresentation Tier Data Tier Arquitetura N-Tier • Podem existir quantas camadas forem necessárias. • A comunicação entre as camadas pode utilizar protocolos e meios distintos. Arquitetura N-Tier FONTE: KEELING, 2017. Conclusão ✔ O projeto das camadas físicas de um software é tão importante quanto as camadas lógicas. ✔ A arquitetura cliente servidor é uma das principais arquiteturas para separação de camadas (tiers). ✔ A arquitetura N-Tier distribui o runtime do software em três ou mais camadas. 01. Próxima Aula Padrão arquitetural Model View Controller. Design Patterns, Estilos e Padrões Arquiteturais AULA 7.4. MODEL VIEW CONTROLLER (MVC) PROF. GLADSTON JUNIO APARECIDO Nesta Aula ❑ O padrão Model View Controller. ❑ Vantagens do MVC. ❑ Variações do MVC. Model View Controller (MVC) • Um dos padrões arquiteturais mais tradicionais. • Tem ampla adoção nas bibliotecas Web, mas também pode ser aplicado em outras plataformas. • Utilizado amplamente nas camadas de UI. − Auxilia na separação de interesses da interface. • Usado em implementações como Spring MVC, Ruby on Rails, ASP .Net MVC, etc. Model • Responsável por gerenciar os dados e o estado da aplicação. • Processa os dados de e para as fontes de dados. • Deve ser independente de controller e view. • Recebe comandos dos controllers para recuperar dados ou sensibilizar a fonte de dados. Model • Considerando as diferentes variações do MVC o Model pode ser: − Ativo: transmite para as views o resultado do processamento das funcionalidades (mudança no estado da aplicação); − Passivo: recebe as demandas e transmite o resultado do processamento para fora da aplicação. View • Responsável pela apresentação da aplicação. • Apresenta os dados para o usuário na interface apropriada; • Coordena a interação do usuário com a aplicação: − Coleta dos inputs fornecidos pelo usuário aciona o controller necessário; − Apresenta o resultado das ações executadas. Controller • Atua como intermediário entre as views e os models. • Responsável por acionar a view adequada informando os dados necessários para sua rendenização. • Sua implementação depende diretamente da capacidade de rastrear o que mudou em cada objeto. Model View Controller (MVC) 1. Sends user actions ControllerView Model 3. Selects appropriated view Model View Controller (MVC) 1. Sends user actions ControllerView Model 3. Selects appropriated view 4. Sends user actions Mundo Externo Model View Controller (MVC) 1. Sends user actions ControllerView Model 3. Selects appropriated view View Controller Vantagens do MVC • Dentre as vantagens do padrão MVC se destacam: − Facilita os testes da aplicação; − Contribui para que uma alteração em uma camada não afete as demais; − Contribui para o reuso dos objetos; − Auxilia na especialização das atividades de frontend e backend em aplicações cliente servidor. Variações do MVC • Existem diversas variações do MVC, como: − Model View Presenter (MVP) − Model View ViewModel (MVVM) − Fractal MVC − Page Controller − Front Controller Conclusão ✔ É um dos mais padrões arquiteturais mais conhecidos. ✔ Está presente em diversos frameworks e bibliotecas. ✔ Propõe a distribuição do software em três macro camadas (Model, View e Controller). ✔ Tem como vantagem a melhoria do nível de reuso e de aptidão para testes. 01. Próxima Aula Conceitos do padrão Model View Presenter. Design Patterns, Estilos e Padrões Arquiteturais AULA 7.5. MODEL VIEW PRESENTER (MVP) PROF. GLADSTON JUNIO APARECIDO Nesta Aula ❑ Os princípios do Model View Presenter (MVP). ❑ Responsabilidades das camadas no MVP. Model View Presenter (MVP) • Variação do padrão MVC. • Propõe a separação entre regras de UI e regras de negócio. • Cada interface de usuário possui uma View correspondente. Model View Presenter (MVP) • Os Controllers são substituídos pelos Presenters. • As Views estão diretamente acopladas ao seu Presenter. • As Views não interagem diretamente com o Model. Model View Presenter (MVP) FONTE: INGENO, 2018. Model • Representa o negócio. • Encapsula o modelo de negócio e seus dados. • Interage com a fonte de persistência para recuperar e armazenar dados. • Recebe inputs do Presenter e, em seguida, reporta ao mesmo o resultado da execução. View • Responsável por rendenizar as interfaces de usuário. • Cada interface possui uma View. • A interação do usuário com a View resulta no envio de mensagens para o Presenter. • Possui papel passivo, confiando no Presenter. Presenter • Intermediárioentre o Model e a View. • Responsável por sensibilizar o Model de acordo com a interação do usuário com a View. • Formata os dados recebidos do Model de forma adequada para a View. Conclusão ✔ Variação do padrão MVC. ✔ Os presenter interagem com o models. ✔ As views possuem relacionamento de 1 para 1 com a interface de usuário e têm papel passivo. 01. Próxima Aula Conceitos do padrão Model View ViewModel. Design Patterns, Estilos e Padrões Arquiteturais AULA 7.6. MODEL VIEW VIEWMODEL (MVVM) PROF. GLADSTON JUNIO APARECIDO Nesta Aula ❑ Os princípios do Model View ViewModel (MVVM). ❑ As responsabilidades das camadas no MVVM. Model View ViewModel (MVVM) • Padrão arquitetural baseado no MVC. • Tem como principal diferença a separação da interface de usuário do restante da aplicação. • Utiliza o conceito de data binding. • Pode ser utilizado em aplicações desktop, web e mobile. Model • Tem responsabilidades similares ao Model dos padrões MVC e MVP. • Entretanto, podem existir vínculos do tipo data binding estabelecidos com as propriedades do Model. − Nesse caso o Model atua de forma ativa. − Dispara eventos para sinalizar mudanças nas suas propriedades. View • No padrão MVVM as Views possuem as seguintes características: − São ativas; − Não são totalmente manipuladas pelos Presenters; − Realizam o tratamento dos seus eventos; − Têm consciência da existência dos ViewModels e Models. − Delegam as ações para o ViewModel por meio de comandos ou data binding. ViewModel • Similares aos Controllers e Presenters do MVC e MVP. • Suas principais características e responsabilidades são: − Disponibilizar dados para as Views; − Encapsular as regras de interação entre Views e Models. − Concentram as regras de navegação. • No MVVM as Views tendem a possuir menos código. Model View ViewModel (MVVM) FONTE: INGENO, 2018. Conclusão ✔ Tem como principal diferencial a separação da UI do restante da aplicação. ✔ Utiliza conceitos de eventos e data binding para interação entre as camadas. ✔ As views possuem o mínimo possível de código. 02. 01. 03. Próxima Aula Single Page Applications (SPA). Frameworks SPA. Padrões arquiteturais nas SPA. Design Patterns, Estilos e Padrões Arquiteturais AULA 7.7. SINGLE PAGE APPLICATIONS (SPA) PROF. GLADSTON JUNIO APARECIDO Nesta Aula ❑ Single Page Applications (SPA). ❑ Padrões Arquiteturais nas SPA. ❑ Frameworks SPA. Single Page Applications (SPA) Servidor WebCliente Requisição 1 Requisição 2 Pool de Threads Requisição n Single Page Applications (SPA) • Conjunto de princípios e tecnologias onde, uma vez combinados, permitem: − Entregar aplicações web modernas; − Empregar no desenvolvimento de frontends técnicas até então exclusivas do desenvolvimento de backend na web. Single Page Applications (SPA) HTML5 Javascript e Ajax CSS3 Padrões Arquiteturais (MVC) Frameworks Rotas Frontend Inteligente Página Única Lightweight Backend Test Driven Development Single Page Applications (SPA) • O frontend é composto por uma página principal, denominada shell. • A shell é responsável por coordenar a navegação do usuário. • A interface de usuário é carregada parcialmente durante a interação do usuário. Single Page Applications (SPA) Servidor WebCliente Requisição 1 Resposta - Shell Requisição 2...n (AjaxRequest) Resposta (JSON) Single Page Applications (SPA) • Na arquitetura de aplicações SPA é comum o uso de do padrão Fractal MVC (FMVC). Single Page Applications (SPA) • No lado cliente alguns frameworks utilizam o padrão MVVM. Frameworks e Bibliotecas • Angular • Vue.js • Backbone.js • Knockout.js • React.js Conclusão ✔ Uma das principais tendências no desenvolvimento de aplicações Web. ✔ Utiliza os principais padrões arquiteturais. ✔ Um dos elementos chave é a shell da aplicação. 02. 01. Próxima Aula Conceito de Clean Architecture. Características de uma arquitetura Clean Architecture. Design Patterns, Estilos e Padrões Arquiteturais AULA 7.8. CLEAN ARCHITECTURE PROF. GLADSTON JUNIO APARECIDO Nesta Aula ❑ Conceito de Clean Architecture. ❑ Características de uma arquitetura Clean Architecture. Arquiteturas de Software • Existem diversas propostas para arquiteturas de um software e a maioria possuem algumas características em comum: − Propõem abordagens para separação de interesses; − Dividem o software em camadas. • Exemplos: − Hexagonal Architecutre; − Onion Architecture; − Screaming Architecture. Arquiteturas de Software • As arquiteturas em geral visam garantir ao software características como: − Independência de framework; − Testabilidade; − Independência de interface de usuário; − Independência de banco de dados; − Manutenibilidade. Clean Architecture • Uma das principais propostas é a Clean Architecture. • Similar à Onion Architecture. • O relacionamento entre as camadas do software é regido por uma diretriz que estabelece : “As dependências do código-fonte devem apontar apenas para dentro, em direção a políticas de nível superior.” (MARTIN, 2017). Clean Architecture FONTE: MARTIN, 2017. Clean Architecture • As camadas propostas são: − Entities: concentra as regras de negócio críticas ou estratégicas para a organização. − Use Cases: encapsulam as regras de negócio específicas de um software da organização; Clean Architecture • As camadas propostas são: − Interface Adapters: responsável por adaptar os dados dos use cases para um formato mais adequado para os agentes externos (Web, Mobile, API, etc.); Clean Architecture FONTE: MARTIN, 2017. Clean Architecture • As camadas propostas são: − Framework e Drivers: códigos e demais artefatos específicos de plataformas, acesso a dados, segurança, etc. Clean Architecture FONTE: MARTIN, 2017. Clean Architecture • A Clean Architecture é um modelo de referência. • A interação entre as camadas pode acontecer por meio de diferentes tecnologias. • Sua implantação pode ser complexa e onerosa. Clean Architecture Conclusão ✔ Importante arquitetura de referência para construção de aplicações modernas. ✔ Distribui o software em camadas de forma similar à Onion Architecture. ✔ O fluxo de interação entre as camadas deve ser sempre no sentido da camada mais interna. 02. 01. 03. 04. Próxima Aula Conceito de Sistemas Distribuídos (SD). Principais características de SD. Desafios do desenvolvimento de SD. Tipos de Sistemas Distribuídos. Design Patterns, Estilos e Padrões Arquiteturais CAPÍTULO 8. ARQUITETURAS PARA SISTEMAS DISTRIBUÍDOS PROF. GLADSTON JUNIO APARECIDO Design Patterns, Estilos e Padrões Arquiteturais AULA 8.1. INTRODUÇÃO AOS SISTEMAS DISTRIBUÍDOS PROF. GLADSTON JUNIO APARECIDO Nesta Aula ❑ Conceito de Sistemas Distribuídos (SD). ❑ Tipos de Sistemas Distribuídos. ❑ Principais características de SD. ❑ Desafios do desenvolvimento de SD. Sistemas Distribuídos • Coleção de computadores autônomos, interligados através de uma rede de computadores e equipados com software que permite o compartilhamento de recursos do sistema: hardware, software e dados [Coulouris]. • Coleção de computadores independentes que se apresenta ao usuário como um sistema único e coerente [Tanenbaum]. Recursos • Termo Abstrato. • Representa objetos de hardware: − Discos, impressoras, etc. • Entidades de software: − Sistemas, arquivos, banco de dados, etc. Tipos de Sistemas Distribuídos • Sistemas de Computação Distribuídos; • Sistema de Informação Distribuídos; • Sistemas Distribuídos Pervasivos. Exemplos FONTE: Computer.org Internet Exemplos FONTE: Folioweb.org World Wide Web Exemplos FONTE: Citrix DNS (Domain Name Service) Exemplos FONTE: Citrix Clusters e Grids Exemplos • Sistemas de Informação: − E-commerce; − Logísticas; − Banking; − Reserva de passagens. • Motivação para o desenvolvimento de tecnologias paraintegração de aplicações corporativas: − Service Oriented Architecture (SOA); − Enterprise Application Integration (EAI); − Enterprise Service Bus (ESB). Características • Execução concorrente dos componentes do sistema. • Ausência de clock global. • Independência de falhas. Desafios • Heterogeneidade. • Escalabilidade. • Segurança. • Flexibilidade. • Tratamento de Falhas. • Concorrência. • Transparência Conclusão ✔ SD representam uma coleção de computadores independentes que se apresenta ao usuário como um sistema único e coerente. ✔ A presença do meio de comunicação acrescenta grandes desafios para o desenvolvimento do sistema. 02. 01. Próxima Aula Modelos Arquiteturais em SD. Middlewares. Design Patterns, Estilos e Padrões Arquiteturais AULA 8.2. MODELOS ARQUITETURAIS EM SD PROF. GLADSTON JUNIO APARECIDO Nesta Aula ❑ Modelos Arquiteturais em SD. ❑ Modelo Cliente Servidor. ❑ Modelo Peer to Peer. Modelos Arquiteturais em SD • Um modelo arquitetural determina como as partes ou componentes de um Sistema Distribuído são estruturadas e dispostas, além de determinar como é realizado o relacionamento entre elas. Modelos Arquiteturais em SD • Um Sistema Distribuído é composto basicamente por dois tipos de processos: − Cliente: programa que solicita pedidos a um processo servidor. − Servidor: programa que executa operações solicitadas pelos usuários, enviando o respectivo resultado. Modelos Arquiteturais em SD • O papel de cada processo pode alternar de acordo o fluxo de informações: − Um servidor de banco de dados é frequentemente um cliente de um servidor de arquivos; − Um navegador é um cliente dos servidores web; − Os crawlers dos mecanismos de buscas são clientes dos servidores web. Cliente Servidor • Modelo mais utilizado na prática. • Simplicidade facilita a implementação. • Escalabilidade limitada (servidor pode representar um gargalo). • Segurança concentrada no servidor e no meio de comunicação. Cliente Servidor • Servidores individuais Cliente Servidor • Múltiplos servidores Cliente Servidor • Cache / Proxy Peer to Peer • Todos os processos podem assumir o papel de clientes e servidores do mesmo serviço em diferentes momentos. • Exemplos: − Compartilhamento de arquivos; − Edição colaborativa de documentos. − Blockchain. Peer to Peer • Maior complexidade. • Não existe ponto único de falha. • Maior potencial para escalabilidade. • Heterogeneidade e segurança podem se tornar pontos críticos. Peer to Peer Conclusão ✔ A escolha do modelo arquitetural correto é fator determinante para o sucesso de um sistema. ✔ Cliente servidor é o modelo mais utilizado e existem diferentes variações. 01. Próxima Aula Middlewares. Design Patterns, Estilos e Padrões Arquiteturais AULA 8.3. MIDDLEWARES PROF. GLADSTON JUNIO APARECIDO Nesta Aula ❑ Conceitos e características de Middlewares. Middleware • Camada de software. • Provê serviços que permitem: − Interação entre múltiplos processos em um ou vários computadores. • Invocar de métodos remotamente; • Enviar notificações de eventos; • Replicação de dados. Middleware • Prover um modelo de programação homogêneo, coeso e conveniente para os desenvolvedores. • Simplifica e torna mais produtivo o desenvolvimento de uma aplicação distribuída. • Amplamente utilizados em: − Sistemas embarcados e robótica; − Sistemas de Informação. − Sistemas multimídia. Middleware • Linguagens de programação: abstraem o hardware (registradores, instruções de máquina, modos de endereçamento, periféricos, etc.). • Middleware: abstraem a rede (endereços IP, portas, sockets, formato de mensagens, conexões, falhas, etc.). Middleware Middleware Middleware • Principais tipos de middlewares: − Middleware procedural / Remote Procedure Call; − Middleware orientado a transação / transacional; − Middleware orientado a objetos; − Middleware orientado a mensagem; − Middleware baseados em componentes. Conclusão ✔ Middleware atua acima da plataforma. ✔ Middleware viabiliza e simplifica a comunicação entre os computadores do SD. 01. Próxima Aula Middlewares Orientados a Objetos. Design Patterns, Estilos e Padrões Arquiteturais AULA 8.4. MIDDLEWARES ORIENTADOS A OBJETOS PROF. GLADSTON JUNIO APARECIDO Nesta Aula ❑ Middlewares Orientados a Objetos. Objetos Locais vs Remotos • Objetos Locais: − Referência a ponteiros da memória. − Disponibilizam comportamentos e dados para outros objetos. − Implementação independente da interface. Objetos Locais vs Remotos • Objetos Distribuídos: − Referência do objeto aponta para um endereço de rede. − Proveem serviços (compartilhamento de recursos). − Apenas a interface é visível. Middleware Orientados a Objetos • Permite que objetos clientes possam chamar métodos de objetos remotos com transparência de acesso. − Transparência de acesso: uso da mesma sintaxe de chamadas locais. Middleware Orientados a Objetos • Principais Implementações: − RMI (Remote Method Invocation). − CORBA. − Microsoft .Net Remoting. − DCOM (Distributed COM). Middleware Orientados a Objetos • Envolve basicamente três componentes: − Servidor de Aplicação. − Servidor de Nomes. − Cliente. Servidor de Aplicação • Cria as instâncias dos objetos remotos. • Registra os objetos remotos. − Registrar significa atribuir um nome que permita o acesso ao objeto pela rede. Servidor de Nomes • Provê o serviço de localização de objetos remotos (diretório). • Funciona como um catálogo de objetos remotos. Cliente • Consulta o servidor de nomes para obter acesso ao objeto remoto. − Precisa conhecer o nome do objeto. • Utiliza a referência de rede do objeto remoto para realizar as chamadas remotas. Conclusão ✔ Middlewares Orientados a Objetos permitem acessar objetos remotos com transparência de acesso. ✔ São necessário três elementos (servidor de aplicação, servidor de nomes, cliente). 01. Próxima Aula Demonstração de Middlewares Orientados a Objetos. Design Patterns, Estilos e Padrões Arquiteturais AULA 8.5. DEMONSTRAÇÃO: MIDDLEWARES A ORIENTADOS OBJETOS PROF. GLADSTON JUNIO APARECIDO Nesta Aula ❑ Demonstração de Middlewares Orientados a Objetos. DEMONSTRAÇÃO Conclusão ✔ Java RMI é um dos principais middlewares para disponibilização e consumo de objetos remotos. ✔ Middlewares Orientados a Objetos são dependentes de plataforma. ✔ Middlewares Orientados a Objetos permitem que dados sejam transferidos na rede por valor ou por referência. 01. Próxima Aula Middlewares Orientados a Mensagens. Design Patterns, Estilos e Padrões Arquiteturais AULA 8.6. MIDDLEWARES ORIENTADOS A MENSAGENS PROF. GLADSTON JUNIO APARECIDO Nesta Aula ❑ Middlewares Orientados a Mensagens (MOM). Contextualização • Provê suporte para comunicação persistente assíncrona. • Oferecem capacidade de armazenamento temporário para mensagens, não exigindo que o emissor e o receptor estejam ativos durante a transmissão da mensagem. • Suportam trocas de mensagens que podem levar vários minutos em vez de alguns segundos ou milissegundos. Contextualização • MOM são intermediários na comunicação por mensagens entre dois processos. − Não existe comunicação ponto a ponto entre os processos. • As principais implementações usam filas de mensagens: − O processo emissor insere mensagens na fila; − O processo receptor lê as mensagens inseridas. Contextualização • Diversos processos podem inserir mensagens em uma fila. • Filas podem ser exclusivas de uma aplicação ou compartilhadas. • Mensagens grandes podem ser fragmentadas e remontadas pelo sistema de forma transparente para a aplicação. Contextualização • É garantido ao emissor que suas mensagens serão registradas na fila. • Entretanto, não há garantias de quando as mensagens serão lidas e se serão efetivamente lidas. • Comunicação fracamente acoplada.Contextualização Quando Utilizar • Quando for necessário remover a dependência de conhecimento entre a interface de um componente da aplicação. • Quando se deseja executar uma aplicação sem que todos os componentes estejam executando simultaneamente. • Quando o contexto operacional da aplicação possibilita que um componente envie uma mensagem a outro e continue funcionando sem receber uma resposta imediata. MOM – Arquitetura MOM – Arquitetura • Filas são mantidas por componentes denominados gerentes de filas. • Filas podem não ter ordem definidas ou seguir regras como FIFO, LIFO ou prioridade. MOM – Roteadores • Componente opcional que permite: − Encaminhar as mensagens para os gerentes de filas ou outros roteadores. − Realizar procedimentos secundários como segurança e tolerância a falhas. − Realizar comunicação multicast. • Assumem a responsabilidade de conhecer a topologia de rede. • Melhoram a escalabilidade do sistema. MOM – Roteadores MOM – Brokers • Permite a integração entre aplicações que utilizam protocolos/formatos distintos. − Realizam a conversão das mensagens com base em regras de conversão. • Auxiliam na integração com aplicações legadas. MOM – Brokers MOM – Vantagens • Paradigma de troca de mensagens é simples, natural e fácil de entender. • Emissor e receptor não precisam estar ativos simultaneamente. • Componentes podem ser facilmente substituídos. MOM – Vantagens • Menor overhead de comunicação. − Não é necessário manter uma conexão ativa. • Mensagens podem ser criptografadas impedindo a violação das mensagens. MOM – Implementações • Java Message Service (JMS). • Advanced Message Queueing Protocol (AMQP). • IBM WebSphere MQ. • Apache ActiveMQ. • Microsoft Message Queue Server (MSQS). • Oracle Advanced Queueing (AQ). Conclusão ✔ MOM provê suporte para comunicação persistente assíncrona. ✔ Permitem que os componentes de software executem suas funções sem que a outra parte esteja em execução. ✔ Contribuem para a melhoria da escalabilidade do sistema. 02. 01. Próxima Aula SOAP. Web Services. Design Patterns, Estilos e Padrões Arquiteturais AULA 8.7. WEB SERVICES PROF. GLADSTON JUNIO APARECIDO Nesta Aula ❑ SOAP. ❑ Web Services. ❑ WSDL. ❑ UDDI. SOAP • Acrônimo de Simple Object Access Protocol. • Protocolo adotado pelo W3C para troca de mensagens na Internet. • Originalmente desenvolvido pela Microsoft, IBM e Lotus. • Utiliza XML para formatação de mensagens e HTTP para transporte de mensagens de um nó a outro. SOAP • SOAP especifica como representar, em XML, todas as informações necessárias para se executar uma chamada remota. − Define o formato da mensagem de requisição. − Define o formato da mensagem de retorno. • Independente de linguagem de programação. • As mensagens são representadas por um “envelope”. SOAP – Envelope • Código: • Envelope SOAP: Web Services • Middleware para aplicações distribuídas: − Comunica por meio de mensagens XML; − Formatadas e encapsuladas de acordo com o protocolo SOAP; − Transportadas via HTTP. − Interface (contrato) é definida em uma linguagem denominada WSDL (Web Services Description Language). − Podem ser registrados em servidores UDDI (Universal Description, Discovery and Integration). Web Services • Aplicação cliente realiza a chamada. • Proxy intercepta a chamada e constrói a mensagem XML de requisição. • Listener SOAP recebe, analisa e valida a mensagem. • Listener encaminha a requisição para o componente. • Listener recebe o resultado, constrói e transmite o retorno. • Proxy recebe e analisa a resposta e encaminhada ao cliente. • Processo totalmente transparente para o cliente e o componente. Consumidor Provedor Aplicação Cliente Proxy SOAP XML/HTT P Componente Serviço Web Listener SOAP WSDL • Linguagem para descrever a localização e a interface de um Serviço Web: − Nome e URL do serviço (binding information). − Assinatura dos métodos disponíveis para chamada remota (abstract interface). WSDL UDDI • Conjunto de especificações para: − Registro de um Serviço Web. − Pesquisa de Serviços Web utilizando uma interface Web ou SOAP. • Pesquisas por um serviço podem ser realizadas em: − Páginas brancas: contém nome e informações de contato. − Páginas amarelas: serviços organizados em “categorias”. Conclusão ✔ Web Services é um middleware para integração de aplicações na Web. ✔ Utiliza SOAP como protocolo de formatação e HTTP como protocolo de transporte. ✔ Fornece transparência de acesso. ✔ WSDL é uma linguagem baseada em XML para definição de contratos de serviços. 01. Próxima Aula Demonstração de Web Services. Design Patterns, Estilos e Padrões Arquiteturais AULA 8.8. DEMONSTRAÇÃO: WEB SERVICES PROF. GLADSTON JUNIO APARECIDO Nesta Aula ❑ Demonstração de Web Services. Web Services DEMONSTRAÇÃO Conclusão ✔ Por meio de Web Services é possível ter interoperabilidade de plataformas em integrações na Web. ✔ Os contratos dos serviços (WSDL) são gerados dinamicamente. 01. Próxima Aula Modelo arquitetural REST. Design Patterns, Estilos e Padrões Arquiteturais AULA 8.9. REST PROF. GLADSTON JUNIO APARECIDO Nesta Aula ❑ Definição de REST. ❑ Vantagens do REST. ❑ Diretrizes do REST. REST • Representational State Transfer é um estilo arquitetural para aplicações Web. − REST não é um protocolo e portanto não é similar ao SOAP. − REST não é um middleware e portanto não é similar aos Web Services. • Original proposto na tese de doutorado de Roy Fielding. − Autor de RFC como RFC2616 HTTP 1.1 e RFC3986 URI. REST • REST propõe uma arquitetura que combina diversos padrões: − HTTP − URL − XML − JSON − MIME types − Hipermídia REST • REST é orientado a recurso: − Recursos: partes de uma informação; − Mapeados por uma URI; − Transferidos de servidor para cliente e vice versa. REST O estado do cliente é alterado com base nas URL selecionadas. REST • O estado da aplicação e seus comportamentos são abstraído em recursos. − Os recursos são únicos. • O acesso aos recursos é padronizada por uma interface: − As operações permitidas são definidas pelos métodos do HTTP (GET, POST, PUT, DELETE). − O formato do conteúdo é definido pelo content- type (text/html, application/json, etc.). Vantagens • Utiliza conceitos e tecnologias amplamente aceitos. • Simplicidade. • Uso da World Wide Web. Diretrizes • Uma arquitetura REST é regida por 6 diretrizes: 1) Paradigma Cliente Servidor: • Cliente recuperar e persiste dados por meio do servidor. • Servidor deve interagir com clientes de qualquer plataforma. Diretrizes • Uma arquitetura REST é regida por 6 diretrizes: 2) Stateless • Cliente deve informar ao servidor tudo que ele precisa para atender à requisição. • Servidor não deve armazenar dados de contexto do uso das requisições. Diretrizes • Uma arquitetura REST é regida por 6 diretrizes: 3) Uso de Cache • Servidor deve rotular as respostas indicando se elas podem ou não ser armazenadas em cache. Diretrizes • Uma arquitetura REST é regida por 6 diretrizes: 4) Interface Uniforme • Recursos são identificados e acessos de forma uniforme (padronizada); • Hypermedia As The Engine Of Application State (HATEOAS). Diretrizes • Uma arquitetura REST é regida por 6 diretrizes: 5) Distribuição em camadas • Aplicações compostas por três camadas: − Cliente; − Servidor; − Intermediários. Diretrizes • Uma arquitetura REST é regida por 6 diretrizes: 6) Code on demand: • Diretriz opcional. • Propõe o download e a execução dinâmica de código. • Muito utilizado em SPA por exemplo. Comunicação • Em uma aplicação REST-ful o acesso aos recursos tem as seguintes características: − Endereço baseado em URI (no caso URL na Web). − As operações sobre os recursos (CRUD) são mapeadas nos métodos do HTTP: • Create: POST • Read: GET • Update: PUT • Delete: DELETE
Compartilhar