Buscar

FUNDAMENTOS DE ARQUITETURA DE SISTEMAS

Prévia do material em texto

FUNDAMENTOS DE ARQUITETURA DE SISTEMAS
VANTAGENS E DESENVOLVIMENTO DE WEB SERVICES
SOAP – Simple Object Access Protocol:
· É um protocolo baseado em XML para acessar serviços web principalmente por HTTP;
· Pode-se dizer que SOAP é uma definição de como serviços web se comunicam;
· Foi desenvolvido para facilitar integrações entre aplicações.
Vantagens:
· Permite integrações entre aplicações, independente de linguagem pois usa como linguagem comum o XML;
· É independe de plataforma e software;
· Meio de transporte genérico, ou seja, pode ser usado por outros protocolos além do HTTP.
XML – Extensible Markup Language:
· É uma linguagem de marcação criada na década de 90 pela W3C;
· Facilita a separação de conteúdo;
· Não tem limitação de criação de tags;
· Linguagem comum para integração entre aplicações.
- O “SOAP Message” possui uma estrutura única que deve sempre ser seguida:
SOAP Envelope
SOAP Body
SOAP Header
	
· O SOAP Envelope é o primeiro elemento do documento e é usado para encapsular todo a mensagem SOAP;
· SOAP Header é o elemento onde possui informações de atributos e metadados da requisição;
· SOAP Body é o elemento que contém os detalhes da mensagem.
WSDL – Web Services Description Language:
· Usado para descrever Web Services, funciona como um contrato do serviço;
· A descrição é feita em um documento XML, onde é descrito o serviço, especificações de acesso, operações e métodos.
XSD – XML Schema Definitio:
· É um schema no formato XML usado para definir a estrutura de dados que será validada no XML;
· O XSD funciona como uma documentação de como deve ser montado o SOAP Message (XML) que será enviado através de Web Services.
REST – Representational State Transfer:
· É um estilo de arquitetura de software que define a implementação de um serviço web;
· Podem trabalhar com os formatos XML, JSON ou outros.
Vantagens:
· Permite integrações entre aplicações e também entre cliente e servidor em páginas web e aplicações;
· Utiliza dos métodos HTTP para definir a operação que está sendo efetuada;
· Arquitetura de fácil compreensão.
Estrutura:
· Quando uma aplicação web disponibiliza um conjunto de rotinas e padrões através de serviços web podemos esse conjunto de API.
API – Application Programming Interface:
· São conjuntos de rotinas documentados e disponibilizados por uma aplicação para que outras aplicações possam consumir suas funcionalidades;
· Ficou popular com o aumento dos serviços web;
· As maiores plataformas de tecnologia disponibilizam APIs para acessos de suas funcionalidades. Algumas delas são: Facebook, Twitter, Telegram, Whatsapp, GitHub...
Principais Métodos HTTP:
· GET – solicita a representação de um recurso;
· POST – solicita a criação de um recurso;
· DELETE – solicita a exclusão de um recurso;
· PUT – solicita a atualização de um recurso;
JSON – JavaScript Object Notation:
· Formatação leve utilizada para troca de mensagens entre sistemas;
· Usa-se de uma estrutura de chave e valor e também de listas ordenadas;
· Um dos formatos mais populares e mais utilizados para troca de mensagens entre sistemas.
Códigos de estado HTTP – Status Code:
· Usado pelo servidor para avisar o cliente sobre o estado da operação solicitada;
· 1xx – Informativo;
· 2xx – Sucesso;
· 3xx – Redirecionamento;
· 4xx – Erro do Cliente;
· 5xx – Erro do Servidor.
CONCEITOS DE ARQUITETURA EM APLICAÇÕES PARA INTERNET
Pros e contra 
1. Monolito:
Pros:
· Baixa complexidade;
· Monitoramento simplificado;
Contra:
· Stack única;
· Compartilhamento de recursos;
· Acoplamento;
· Mais complexo a escalabilidade.
2. Micro-serviços #1:
Pros:
· Stack dinâmica;
· Simples escalabilidade;
Contra: 
· Acoplamento;
· Monitoramento mais complexo;
· Provisionamento mais complexo.
3. Micro-serviços #2:
Pros:
· Stack dinâmica;
· Simples escalabilidade;
· Desacoplamento;
Contra:
· Monitoramento mais complexo;
· Provisionamento mais complexo.
4. Micro-serviços #3:
Pros:
· Stack dinâmica;
· Simples escalabilidade;
· Desacoplamento;
· Menor complexidade;
Contra:
· Provisionamento mais complexo;
· Plataforma inteira depende do gerenciador de pipeline.
Gerenciamento de erros:
Onde é mais complexo?
· Processos assíncronos (Micro-serviço #2);
· Pipeline
Solução:
· Dead letter queue: cria uma fila separada
· Filas de re-tentativas.
Message Broker: permite identificar o motivo de um determinado serviço ter sido incapaz de responder no momento de uma requisição.
ARQUITETURA DE APLICAÇÕES MÓVEIS E INTERNET DAS COISAS
Internet das Coisas
Considere esses atributos na escolha de como irá coletar os dados:
· Baixo consumo de energia
· Rede de dados limitado
· Resiliência
· Segurança
· Customização 
· Baixo custo
Arduino:
· Plataforma de Prototipagem;
· Com entradas/saídas;
· Desenvolvedor escreve em C/C++;
· Interface serial ou USB;
· Shields
Embarcados:
MCUs:
· Microcontrolador de chip único
· Sistema operacional real-time
· Embarcado 
· Uso industrial, médico, militar, transporte etc
Minicomputadores:
Raspberry Pi:
· Computador completo
· Hardware integrado em uma única placa
· Roda SO Linux ou Windows
· Uso doméstico e comercial
Protocolo de comunicação – MQTT:
· É o mais utilizado em IoT
· Base na pilha do TC/IP
· Protocolo de mensagem assíncrona (M2M – machine to machine)
· Criado pela IBM para conectar sensores de pipelines de petróleo a satélites
· Padrão OASIS suportado pelas linguagens de programação mais populares
QoS – Quality of Services:
QoS 0:
· Nível mínimo de menor esforço
· Sem garantia de entrega
· Mensagem não é retransmitida
· Mais barato
QoS 1:
· Garante que a mensagem foi entregue no mínimo uma vez ao receber
· Mensagem pode ser retransmitida se não houver confirmação de entrega
QoS 2:
· Garante que a mensagem foi entregue no mínimo uma vez ao recebedor
· Mensagem pode ser retransmitida se não houver confirmação de entrega
ARQUITETURA DE DADOS ESSENCIAL
Dados -> Informação -> Conhecimento
Modelo sustentável:
· Estruturação
· Durabilidade
· Velocidade
· Controle de Acesso
· Isolamento 
SGDBs – Sistemas de Gerenciamento de Bancos de Dados
· Linguagem de Definição
· Linguagem de Manipulação
· Dicionário de Dados
Modelo Flat – modelo mais básico de BD
Modelo Hierárquico – já não é mais utilizado
Modelo Relacional – o mais usado no mercado atualmente (conjunto de modelos flat que se relacionam)
Outros modelos:
· Redes – Graphos
· Orientado a Objetos
· Objeto-Relacional
· Big Data
Banco de Dados Relacionais:
· Tabelas ou Entidades 
· Registros ou Tuplas – informações na horizontal
· Colunas – informações na vertical
· Chaves PK (Primary key) / FK (Foreign Key)
Modelagem:
· Modelo conceitual – MER
· Modelo Lógico – Implementação 
MER – DER (Diagrama de Entidade de Relacionamento)
- Entidades fortes – não dependem de outras para existirem
- Entidades fracas – dependem de outras para existirem
- Entidades associativas
SQL – Structured Query Language
· DDL – Data Definition Language
· DML – Data Manipulation Language
· DQL – Data Query Language 
DDL – Ex.:
Create Table Cliente
(
Codigo number(10) Not Null Primary Key,
Nome varchar(50) Not Null,
Telefone varchar(15)
)
DML – Ex.:
Insert into Cliente (Codigo, Nome, Telefone)
values (1, “Lorem ipsum”, “(88) 9999 9999”)
Delete from Cliente
Where Codigo = 1
Updade Cliente
set Nome = “Lore Ipsum”
Where Codigo = 1
DQL – Ex.:
Select Codigo,
 Nome
 from Cliente
<Where> Codigo = 1
 <Group by> Profissao
 <Having> Count(1) > 0
<Order by> Nome, Codigo
ACID – Transactions:
· Atomicidade – Todas as operações executadas com sucesso. Commit ou Rollback
· Consistência – unicidade de chaves, restrições de integridade lógica etc;
· Isolamento – várias transações podem acessar simultaneamente o mesmo registro (ou parte dele);
· Durabilidade – depois do Commit, mesmo com erros, queda de energia etc, as alterações devem ser aplicadas.
SGDBs-R – Bancos de Dados Comerciais
· Oracle
· Microsoft SQL Server
· IBM DB2
· PostgreSQL (gratuito)
· MySQL (gratuito)
· SQLite (gratuito)
CONCEITOS DE RESPONSIVIDADEE EXPERIÊNCIA DO USUÁRIO
Briefing, Imersão e Unpack:
· Um grande projeto começa sempre com um briefing bem feito. É no briefing que se entende o objetivo de um projeto, e o objetivo é fundamental para entender o porquê daquele trabalho, e se a solução inicialmente imaginada irá gerar o resultado desejado.
· Através da imersão, procuramos conhecer o problema, o contexto, o público, os stakeholders, as premissas, as regras de negócio, o histórico, a estratégia, as demandas, as reclamações etc.
· A imersão é a base de conhecimento necessária para que se comece a delinear uma solução;
· Geralmente em um Sprint Design, o primeiro dia é conhecido como “Unpack” e é nessa etapa que podemos ouvir várias informações diferentes, e é fundamental para o sucesso do projeto.
Wireframes, Grids e Hierarquia:
· Estrutura – Como os objetos devem ser posicionados no layout?
· Conteúdo – Como serão colocados os conteúdos para ajudar na usabilidade e interatividade do usuário?
· Hierarquia informativa – Como o conteúdo será organizado e apresentado?
· Funcionalidade – Como será a usabilidade em cima da interface? Em relação ao Comportamento, como interagir com o usuário? E como ele se comporta?
Grids, Alinhamento e Espaçamento:
· Grid – Podemos mais facilmente determinar o fluxo de leitura que queremos que o nosso leitor tenha. Nos ajuda a projetar em proporções harmoniosas balanceando os pesos dos elementos gráficos do layout. Permite criar peças mais eficazes.
Luzes, Sombras, Consistência e Padrão:
· Luzes e Sombras – As luzes e sombras são os recursos que garantem movimento, profundidade, sobreposição e contraste em sua interface. É importante para separar elementos, menus, demarcar áreas importantes e principalmente indicar ações possíveis em seu projeto;
· Consistência e padrão – Lembre-se que o seu projeto deve manter o mesmo tom de redação (UX Writer), o mesmo padrão visual (Design System) e a mesma consistência em diversos devices (UX Design).
Cores:
Saber usar as cores em um projeto não é uma tarefa fácil, principalmente quando se está iniciando na área de UI Design. Uma dica é conhecer um pouco sobre a psicologia das cores para entregar algo factível ao cliente. 
Cores – UI Primárias:
· Paleta Primária – Estas são as cores mais importantes de todo o sistema. A paleta primária é composta pelas cores principais da marca, tons de cinza e, geralmente, o azul flat.
Cores – UI Secundárias:
· Paleta Secundária – Além das cores primárias, suas variações e tons de cinza, todo designer de interfaces precisa, também, escolher as cores que já têm, por padrão, um significado próprio. Por exemplo, a cor vermelha é comumente associada a erro, o verde a sucesso e o amarelo a avisos importantes. Essas cores, chamadas “Cores de Feedback” são essenciais dentro de uma interface porque já trazem um significado implícito que já faz parte da cultura do usuário.
Cores – Gradiente:
· Gradiente ou Degradê – A volta do uso do gradiente em 2017, trouxe mais elegência para as interfaces e vem sendo aplicada em diversas formas, como no redesign de logos como do Instagram, por exemplo, e de maneira muito forte nas UI (User Interface) tanto Web como Mobile. Além do maior impacto visual, estimulando o usuário, o degradê proporciona sensações de dinamismo e movimento, visto que as interfaces precisam ser amigáveis e intuitivas. O uso das cores pode ser vista como tentativa de aproximação e melhoria na experiência do usuário.
Tipografia – Qual escolher?
Escolher uma tipografia e como escolher uma roupa. Pense no que as roupas podem dizer sobre você: com base no que você veste, as pessoas podem criar conceitos certeiros ou equivocados sobre seu estilo, personalidade, situação econômica, idade ou impressão que quer causar.]
Tipos de Fonte:
· Serifadas – Apresentam pequenos traços ou prolongamentos no final de suas letras. Elas geralmente representam os conceitos de seriedade e tradicionalidade;
· Sem Serifa (sans-serif) – Essas fontes não têm as linhas extras no final das letras. Por esse motivo, são geralmente consideradas mais modernas e dinâmicas;
· Cursivas (script) – Abrange as fontes manuscritas ou caligráficas passando por vários estilos diferentes, de elegante, pessoal e exclusivo a divertido e descontraído;
· Decorativas ou fantasia (display) – Fontes destinadas a chamarem sua atenção. Elas geralmente são mais inusitadas do que práticas e devem ser usadas em pequenas doses, para efeito e propósito específicos.
Tamanho e peso:
· O tamanho padrão de texto de um browser é 16px.
· O peso é a grossura dos caracteres de um tipo: normal, negrito ou itálico.
Como utilizar os ícones na UI:
· Mantenhas os ícones simples – Simplifique o máximo possível e evite elementos desnecessários. Eles devem traduzir de forma simples a informação que precisam passar no ambiente em que serão usados;
· Combine os ícones com palavras – As pessoas processam mais rapidamente recursos visuais do que textos, especialmente quando já conhecem os significados desses símbolos. As palavras esclarecem a mensagem de um ícone e dão às pessoas confiança nos resultados de suas interações. Mesmo para ícones universais, incluir um texto é geralmente mais seguro.
· Escolha ícones familiares – a compreensão de um ícone pelo usuário é baseada em suas experiências anteriores. Ao decidir incluir ícones na sua interface, pesquise primeiro e se familiarize com o que está sendo usado em plataformas do mesmo segmento;
· Utilize espaçamento – Tenha sempre pelo menos 1cm x 1cm no mínimo em torno do ícone para legibilidade e fácil toque em celulares. Quando grandes o suficiente, os ícones funcionam bem em telas mobile onde o espaço é limitado;
· Consistência – Concentre-se em elementos comuns para usar em seus ícones. A primeira coisa a considerar é a paleta de cores. Não mais do que três cores para manter o design clean. Não tenha medo de repetir elementos em todos os seus ícones. Repetição ajuda os usuários a identificar ícones e associá-los a uma ação. O peso e estilo do ícone também são decisivos na hora de manter a consistência
Utilizando imagens:
· Contexto relevante – Os usuários reagem ao visual mais rápido do que um texto, com isso em mente, certifique-se de que o seu conteúdo coincide com os recursos visuais de apoio. Você deve selecionar as imagens que têm uma forte relação com o seu produto e criar um contexto relevante;
· Relevância – O objetivo do seu site/aplicativo não é exibir imagens, mas as imagens podem mostrar o propósito do seu produto. Use um número limitado de recursos visuais no design, mas use aquela que realmente vai capturar a atenção do usuário.
Guias de Estilo – Manuais:
· Manual da marca – criado pelo designer ou uma equipe de designers que criaram a identidade visual, ele determina a correta aplicação da marca em diferentes suportes (gráfico, web etc.). é um guia que contém todas as informações da marca, fornecendo todas as especificações, recomendações e normas fundamentais para a correta utilização da identidade visual. O objetivo é preservar a uniformidade e coerência de comunicação da marca, mantendo suas propriedades visuais, identificação e reconhecimento da marca independentemente da plataforma em que ela for aplicada.
C# - ESTRUTURA DE PROGRAMA
Os principais conceitos organizacionais em C# são:
· Programas
· Namespaces
· Tipos
· Membros
· Assemblies 
Programas C# consistem em um ou mais arquivos;
Declaram tipos, que contêm membros e podem ser organizados em namespaces;
Classes e interfaces são exemplos de tipo;
Campos, métodos, propriedades e eventos são exemplos de membros;
Quando os programas C# são compilados eles são fisicamente empacotados em assemblies;
Os assemblies geralmente têm a extensão de arquivo .exe ou .dll, dependendo se são aplicações ou bibliotecas.
Tipos de valor:
· Númericos: sbyte, short, int, long, byte, ushort, uint, ulong;
· Caracteres Unicode: char;
· Pontos flutuantes: float, double, decimal;
· Booleano: bool;
· Enum, struct e tipos nullable
Tipos de referência:
· Tipos de classe: class, object, string;
· TiposArrays: int[], int[,], etc;
· Interface, delegate
Classes e Objetos:
· Classes são os tipos mais fundamentais de C#; 
· Uma classe é uma estrutura de dados que combinam estado (campos) e ações (métodos);
· Objetos são instâncias de uma classe;
· As classes suportam herança e polimorfismo, mecanismos pelos quais as classes derivadas põem estender e especializar as classes bases;
· Instâncias de classes (objetos) são criadas usando o operador new, que aloca memória para uma nova instância, chama um construtor para inicializar a instância e retorna uma referência à instância: 
1. Ponto p1 = new Ponto(0, 0);
2. Ponto p2 = new Ponto(10, 20);
· A memória ocupada por um objeto é recuperada automaticamente quando o objeto não está mais acessível. Não é necessário nem possível desalocar explicitamente objetos em C#.
Membros:
· Os membros de uma classe podem ser estáticos ou membros da instância;
· Membros estáticos pertencem a classe e membros da instância pertencem ao objeto;
· Constantes, varáveis, métodos, propriedades, construtores etc.
Acessibilidade:
· Cada membro de uma classe tem uma acessibilidade associada, que controla as regiões do texto do programa que podem acessar o membro. Podem ser:
· public
· protected
· internal
· private
Herança;
· Uma declaração de classe pode especificar uma classe base, herdando os membros public, internal e protected da classe base;
· Omitir uma especificação de classe base é o mesmo que derivar do tipo object.
Métodos:
· Um método é um membro que implementa uma computação ou ação que pode ser executada por um objeto ou classe;
· Os métodos podem ter uma lista de parâmetros, que representam valores ou referências de variáveis passados para o método, e um tipo de retorno, que especifica o tipo do valor calculado e retornado pelo método;
TRABALHANDO COM STRUCTS, INTERFACES E ENUM
O que são Structs:
· Como as classes, as structs são estruturas de dados que podem conter membros de dados e membros de ação, mas, diferentemente das classes, as structs são tipos de valor e não requerem alocação de heap;
· Uma variável de um tipo de struct armazena diretamente os dados da estrutura, enquanto uma variável de um tipo de classe armazena uma referência a um objeto alocado na memória;
· Structs não aceitam herança determinada pelo desenvolvedor;
· São úteis para estrutura de dados que possuem semântica de valor: números complexos. Pontos em um sistema de coordenadas ou pares de chave-valor em um dicionário são bons exemplos de utilização;
· O uso de structs em vez de classes para pequenas estruturas de dados pode fazer uma grande diferença no número de alocação de memória.
· Construtores de structs são chamados com o operador new, semelhante a um construtor de classe, mas em vez de alocar dinamicamente um objeto no heap gerenciado e retornar uma referência a ele, um construtor struct simplesmente retorna o próprio valor struct (normalmente em um local temporário na stack), e esse valor é copiado conforme necessário.
Interfaces:
· Uma interface define um contrato que pode ser implementado por classes e structs;
· Uma interface pode conter métodos, propriedades, eventos e indexadores;
· Uma interface não fornece implementação dos membros que define – apenas suas “assinaturas”;
· As interfaces podem empregar herança múltipla;
Enums:
· Um enum é um tipo de valor distinto com um conjunto de constantes nomeadas;
· Você define enumerações quando precisa definir um tipo que pode ter um conjunto de valores discretos. Eles usam um dos tipos de valor integral como armazenamento subjacente. Eles fornecem significado semântico aos valos discretos;
· Cada tipo de enum possui um tipo integral correspondente chado tipo subjacente do tipo de enum;
· Um tipo de enumeração que não declara explicitamente um tipo subjacente tem um tipo subjacente int;

Continue navegando