domingo, 26 de abril de 2020

Escolhendo um serviço de computação no Azure para sua aplicação




Quando temos uma aplicação seja legada ou nova, é importante termos conhecimento que tipo de serviço necessitaremos para disponibilizá-la na nuvem. Para ajudar nesta escolha foi criado um mapa decisório que lhe orientará qual deverá ser o serviço escolhido.

Importante: Caso sua aplicação contenha vários tipos de comportamentos, considere a aplicação do fluxo para cada um

Para auxiliar no entendimento de cada serviço, segue uma breve descrição e sua principal vantagem.


Esse serviço oferece uma imagem de uma máquina que se comportado como um computador de verdade. Uma das principais vantagens é que uma máquina virtual pode ter seu recursos totalmente controláveis, desde o sistema operacional, recursos de ambiente, memória, CPU, etc, além de oferecer a  flexibilidade da virtualização sem a necessidade de comprar e manter o hardware físico.

Esse serviço oferecer uma estrutura para criação de ambiente Web com as estruturas populares .NET, .NET Core, Node.js, Java, PHP, Ruby ou Python, pode ser executado em instância na modalidade, web, web container e api. A principal vantagem é facilidade de implementação.

Através do tipo de armazenamento Blob é possível armazenar vários objetos (HTML, CSS, JavaScript e arquivos de imagem), além de contar com redundância de dados em escala global. A principal vantagem é o preço, por você somente será taxado pela armazenamento dos arquivos.

Esse serviço permite que você execute pequenas funções sem se preocupar com a infraestrutura do aplicativo. Essas funções podem ser executadas através de gatilhos. A principal vantagem é a execução sem necessidade de servidor, além de ser cobrado somente pela execuções.
Esse serviço oferece a possibilidade de encapsular todos os recursos e componentes necessários de uma aplicação ser executada completamente. A principal vantagem é a velocidade em provisionar esse ambiente, além da possibilidade de escalonamento horizontal.

Esse serviço oferece um repositório de nós de computação (máquinas virtuais) que alto poder de processamento para execução da aplicação.
A principal vantagem é escalonar inúmeras máquinas virtuais para execução da rotina.

Esse serviço oferece uma plataforma de sistemas distribuídos que facilita o empacotamento, implantação e gerenciamento de microsserviços e contêineres escalonáveis e confiáveis. A principal vantagem é o gerenciamento dos aplicativos em nuvem.

Esse serviço oferece todo um ambiente de implantação de containers com o aplicativo, reduzindo a complexidade de gerenciamento e otimizando o escalonamento quando necessário. A principal vantagem é garantia de integridade e a manutenção dos containers.

Marcelo Goberto de Azevedo
Arquiteto na GFT Brasil
//marcelogoberto.com.br

domingo, 19 de abril de 2020

Princípios do SOLID que todo Desenvolvedor deve Conhecer



Há muitos anos os desenvolvedores utilizam a POO - Programação Orientada à Objeto (em inglês, OOP - Object Oriented Design) só que esse padrão por si só não evita programas confusos ou insustentáveis. Pensando em facilitar a criação de códigos, Robert C. Martin definiu cinco diretrizes que definem boas práticas para criação de códigos legíveis e de fácil manutenção, esses princípios foram chamados de SOLID, essa sigla é acrônimo (iniciais do nome em inglês): 

Princípio da responsabilidade única - (Single-responsibility principle)

Uma classe, microsserviços, componentes devem ser responsável por apenas uma atividade. Utilizando esse principio você poderá garantir que qualquer alteração que venha a acontecer no código irá impactar somente seus dependentes diretos. 

Princípio aberto-fechado (Open–closed principle)

As entidades de (classes, módulos, funções) devem estar abertas para extensão, entretanto  fechado para modificação. Utilizando esse principio podemos garantir que as alterações sendo realizadas através de extensão da entidade base nada será afetado no contexto dos códigos que utilizam a classe original. 

Princípio da substituição de Liskov (Liskov substitution principle)

O objetivo desse princípio é verificar que uma subclasse poderá ser substituída pela sua classe base sem erros. O principio é uma homenagem a Barbara Liskov, ela definiu que "se S é um subtipo de T, então os objetos do tipo T, em um programa, podem ser substituídos pelos objetos de tipo S sem que seja necessário alterar as propriedades deste programa".

Princípio de segregação de Interface (Interface segregation principle)

Crie interfaces refinadas e específicas, porque elas são melhores que interfaces genéricas. Não devemos ser forçados a depender das interfaces que não iremos utilizar. Esse princípio lida com as desvantagens da implementação de grandes interfaces únicas.

Princípio da inversão de dependência (Dependency inversion principle)

Chega um momento no desenvolvimento de software em que nosso aplicativo será amplamente composto por módulos. Quando isso acontece, precisamos esclarecer as coisas usando a injeção de dependência. De uma forma objetiva o princípio nos faz entender que sempre devemos depender de abstrações e não das implementações.

Alguns problemas que com certeza surgiram por não adotar esses princípios, serão: repetição de código; código sem estrutura padronizada; fragilidade para manutenção; dificuldade na execução de testes e com certeza baixo reaproveitamento..

Abordamos os cinco princípios que todo desenvolvedor deve seguir. Pode ser assustador no começo, estar em conformidade com todos esses princípios, porém a máxima é verdade, com prática veem a aderência, e como consequência terá um enorme impacto na manutenção de nossos aplicativos.

Marcelo Goberto de Azevedo
Arquiteto na GFT Brasil

segunda-feira, 13 de abril de 2020

Dizer “Eu Não Sei” é Metade do Conhecimento




O autor da frase do título desse artigo é Malik Ibn Anas, ele viveu no século VII e foi um advogado muçulmano e também considerado um estudioso das jurisprudência islâmica. Certa vez um aluno preparou 40 questões para serem respondidas por Anas. Ele respondeu somente quatro perguntas e para outras 36 perguntas respondeu com "Eu não sei". Quando o aluno questionou Anas porque respondeu dessa maneira, ele disse: " Quem é perguntado sobre algo pelo qual não tem conhecimento, não deve ter vergonha de dizer".

Nos dias atuais nas organizações tende haver uma forte pressão para fingir que sabemos das coisas, estamos condicionados a ter e fornecer respostas rápidas como um sinal de competência e liderança, nos comportamos como se todas as lacunas do conhecimento devessem ser preenchidas imediatamente. Entretanto, aliado a essa falta de verdade, temos um acordo tácito que todos fingirão ficar surpresos quanto as coisas derem errado, por conta da falta do conhecimento.

Por que as pessoas acham tão difícil dizer "Eu não sei"?

Líderes são capazes de definir uma visão, levar outras pessoas a comprá-la e mobilizá-la para produzir a mudança necessária para alcançar essa visão. A ideia de muitas pessoas de um líder competente envolve alguém capaz de ver o que os outros não veem. Isso geralmente pode se traduzir em nunca dizer "Eu não sei".

"Eu não sei" é uma resposta legítima, aceitável e mais importante - responsável quando você não sabe uma resposta. Quando estamos assumindo que não temos o conhecimento, criamos a oportunidade de abrir uma lacuna para preenchê-la, ou seja, já estamos na metade do caminho para adquirir o conhecimento, simplesmente despertando a ciência que nos falta a informação, iremos permitir a oportunidade de criar um planejamento para aquisição desse conhecimento num prazo estipulado.

Existe uma maneira muito simples de identificar um especialista real versus um falso. Procure essas três pequenas palavras: "Eu não sei". O falso sempre terá todas as respostas, enquanto o especialista real estará disposto a admitir o que não sabe, pois os reais são motivados pela curiosidade. A credibilidade reside na capacidade de rastrear, pesquisar e sintetizar informações e fornecer essas informações no formato adequado para as pessoas adequadas.

Quando for questionado e não souber a resposta ou ainda não estiver confiante do conhecimento, de uma forma elegante é simplesmente dizer: "Eu não sei a resposta para essa pergunta importante e não quero lhe dar meia resposta. Deixe-me voltar para você até o final do dia." Então na próxima vez em que você for perguntado sobre algo que não souber a resposta imediatamente, tente começar com "Eu não sei...", tenha certeza que irá se desenvolver muito por estar disposto a falar essas três palavras.

Marcelo Goberto de Azevedo
Arquiteto na GFT Brasil
//marcelogoberto.com.br

segunda-feira, 6 de abril de 2020

Usando Análise de Código no Visual Studio 2019 para Melhorar a Qualidade do Código


O Visual Studio oferece um recurso que executa análise de código estático para ajudar os desenvolvedores a identificar potenciais melhoras de design, globalização, interoperabilidade, desempenho, segurança, entre outras categorias de problemas que podem ser evitadas. A análise de código pode ser executada manualmente ou há qualquer momento dentro do projeto no Visual Studio. Uma outra vantagem é utilizada no processo de entrega continua (CD) , ela pode ser configurada para ser executada automaticamente no Azure DevOps.



Por que usar a análise de código estático?

A principal razão é que todos códigos será verificado antes da execução, ou sejam, análise estática verifica TODOS os códigos. Podem ser encontradas vulnerabilidades em códigos  que não estejam sendo executados, ou que não sejam de nosso conhecimento quando existem soluções monolíticas.

O segundo benefício é que você pode definir as regras específicas para o projeto e elas serão seguidas sem nenhuma intervenção manual. Se alguém esquecer de seguir essas regras, elas serão destacadas pelo analisador de código estático. Outro benefício é que podem ser identificados falhas no início do ciclo de desenvolvimento, o que significa menos custo para corrigi-los.

Vamos ver como ativar e configurar o analisador de código no Visual Studio 2019 para um projeto:

1. Abra a solução no Visual Studio 2019
2. Abra as propriedade do projeto e selecione a opção "Análise de Código"



3. Na parte de "Configurar Conjunto de Regras" você poderá definir e/ou configurar as regras que deseja que sejam validadas, para esse exercício vamos selecionar a opção "Todas as Regras da Microsoft"



4. Depois basta selecionar no menu "Compilação" a opção "Executar Análise de Código na Solução"



5. Como resultado da analise na "Lista de Erros" será exibidos todas as sugestões para melhorar o código



6. Clicando sobre um item, será exibido o ponto onde deve ser feita a interação para implementação da solução



7. Depois que implementar as melhorias, basta executar novamente a análise para atualizar a lista de recomendações.

Através da utilização de análise de código podemos garantir melhores códigos e principalmente ir aprender as melhores práticas através das recomendações, porque cada vez que efetuarmos uma implementação estaremos aprender uma boa prática, que com certeza será aplicada durante o processo de criação num próximo desenvolvimento.

Marcelo Goberto de Azevedo
Arquiteto na GFT Brasil