Esse artigo apareceu primeiro em wellingtonjhn.com

O CQS (Command Query Separation) é um pattern introduzido por Bertrand Meyer no livro Object Oriented Software Construction, com a primeira edição publicada em 1988, e a segunda, revisada e expandida em 1997.

A idéia principal é que os métodos de uma aplicação podem ser comandos (commands) ou consultas (queries), mas nunca ambos.

Temos então:

  • Commands: métodos que alteram estado (mudam valores) sem retornar nenhum valor, e causam efeitos colaterais no sistema.
  • Queries: métodos que retornam valores, mas não alteram estado.

No exemplo acima, desconsidere questões como injeção de dependências e abstrações, é apenas…


Foto por Hans-Peter Gauster em Unsplash

Esse artigo apareceu primeiro em wellingtonjhn.com

Como sabemos existem centenas de milhares de APIs no mundo, e a cada dia outras milhares surgem. Cada uma delas tem o seu próprio padrão de mensagens de erro, não existindo um consenso comum.

Você pode conferir um pouco desse problema verificando as APIs do Facebook, Google e Twitter por exemplo. Cada uma delas possui seu próprio formato para mensagens de erro.

Diante disso foi criada a RFC 7807, que é uma especificação que visa padronizar os formatos de mensagens de…


Foto por Daria Nepriakhina em Unsplash

Esse artigo apareceu primeiro em wellingtonjhn.com

É muito comum encontrar nos sistemas corporativos o lançamento de Exceptions ao realizar validações de regras de negócio ou entrada de dados de formulários, afinal de contas é necessário informar ao usuário que algo deu errado.

Porém, o que nós geralmente esquecemos é que Exceptions são inesperadas e elas indicam um erro, uma exceção ao funcionamento normal do sistema, algo que não era para ter acontecido, mas aconteceu.

Uma validação de regra de negócio que potencialmente crie uma mensagem de erro faz parte do funcionamento normal do sistema e é perfeitamente esperado que…


Esse artigo apareceu primeiro em wellingtonjhn.com

Desde as primeiras versões do C# temos à nossa disposição o famoso bloco try…catch, onde podemos capturar exceções e tratá-las da melhor forma possível, seja gravando um log, adicionando uma mensagem amigável para o usuário, etc. Porém, muitas vezes não conseguimos prever todos os possíveis erros que possam acontecer e muitas exceções acabam “explodindo” na tela para o usuário, ou pior, causam a queda de nossos sistemas e até mesmo prejuízos financeiros para nossos clientes.

Uma forma de prevenir que ocorram exceptions não tratadas é fazendo o seu gerenciamento de forma global, assim podemos…


Foto por Glenn Carstens-Peters em Unsplash

Esse artigo apareceu primeiro em wellingtonjhn.com

No artigo anterior eu falei sobre alguns conceitos básicos do modelo de configuração do .Net Core, e um dos itens abordados é a possibilidade de podermos usar objetos POCO para representar grupos de configuração relacionadas entre si usando Options Pattern.

Nesse artigo irei mostrar como podemos validar esses objetos de configuração de forma a garantir que eles foram instanciados corretamente, uma vez que estamos totalmente suscetíveis a erros no momento em que definimos as configurações de nossa aplicação, e podemos deixar algum valor importante em branco por exemplo.

Os projetos de exemplo estão no…


Foto por Chester Alvarez em Unsplash

Esse artigo apareceu primeiro em wellingtonjhn.com

Configurando suas aplicações .Net Core

Antigamente tínhamos os arquivos Web.Config e App.Config em nossas aplicações .Net Framework que na verdade eram arquivos XML onde podíamos colocar as configurações de nossas aplicações, e em conjunto à eles usávamos a classe ConfigurationManager para acessá-los. Muitas vezes esses arquivos se tornavam verdadeiros monstros e sua manutenção traumatizante para muitos desenvolvedores.

Com o lançamento do .Net Core e ASP.Net Core há alguns anos, ganhamos um novo mecanismo de configuração ainda mais poderoso, flexível e simples.

Esse é um artigo introdutório, e imagino que alguns de vocês irão pensar que estou escrevendo ele fora…


Foto por The Roaming Platypus em Unsplash

Esse artigo apareceu primeiro em wellingtonjhn.com

Quando trabalhamos com autenticação baseada em tokens JWT temos que considerar que ele tem um tempo de expiração que irá invalidá-lo em determinado momento. Em alguns cenários pode ser interessante obter um novo token de acesso sem precisar forçar o usuário a fazer um novo login informando seu usuário e senha. Isso é muito comum quando trabalhamos com aplicativos mobile.

Para esse artigo usei o mesmo exemplo de código de um artigo anterior onde mostro como implementar uma API de Autenticação simples com JWT. Você pode conferir em meu Github.

O que é Refresh Token?

Imagine que o cliente…


Esse artigo apareceu primeiro em wellingtonjhn.com

Não basta apenas desenvolver nossas aplicações e largar na mão dos times que farão uso delas. Uma boa documentação é um dos quesitos chave para o sucesso de todo sistema hoje em dia, ainda mais em um mundo de APIs que vivemos hoje, onde existem cada vez mais integrações entre aplicações e serviços.

Imagina você ter que entrar em contato com o desenvolvedor de determinada API para saber quais endpoints você precisa usar, e quais são os parâmetros necessários para a correta integração com seu sistema. Tanto você, quanto ele ficarão loucos com as…


Foto por Chris Barbalis em Unsplash

Esse artigo apareceu primeiro em wellingtonjhn.com

Em um artigo anterior eu falei sobre a criação de uma API de Autenticação utilizando ASP.Net Core. Hoje quero falar um pouco sobre como podemos fazer a Autorização de nossos usuários dentro das APIs.

Sendo que no artigo citado acima eu fiz uma breve introdução sobre os conceitos de Autenticação e Autorização, então, se você não viu corre lá e depois volte aqui.

Os recursos de autorização descritos neste artigo foram implementados a titulo de demonstração nesse projeto que está no meu Github.

Quando uma identidade de usuário é criada, ela pode ter Roles…


Foto por Nicole Harrington em Unsplash

Esse artigo apareceu primeiro em wellingtonjhn.com

No artigo anterior eu mostrei como criar uma API de autenticação em ASP.Net Core com JWT. Hoje iremos ver como podemos obter o usuário autenticado, extraindo os dados do token de uma forma muito simples.

Para isso o ASP.Net Core oferece uma biblioteca de abstrações HTTP (pacote nuget Microsoft.AspNetCore.Http.Abstractions) que contém a interface IHttpContextAccessor.

A classe HttpContextAccessor implementa tal interface, e possui uma propriedade onde podemos obter o HttpContext da requisição e com ele a identidade do usuário logado. Ela deve ser registrada no contêiner de DI como Singleton.

Para simplificar as coisas, podemos…

Wellington Nascimento

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store