ASP.NET Web API: Configurando a serialização com JSON e XML

O ASP.NET Web API é um framework muito flexível e testável, falando em API’s existem diversas maneiras de empacotar e entregar as informações para os clientes que estão utilizando, recentemente tive que realizar algumas configuração de data e formatação de como os objetos seriam serializando. Pensando nisto, decidi escrever este post para mostrar algumas das possibilidades de configurações em como é feita a serialização e entrega pelas nossas WebAPI’s.

Continue reading

C# e a API do Simplify Commerce (MasterCard)

Recentemente participei de um hackathon da MasterCard (http://mastersofcode.com/) foi uma excelente experiência (recomendo participar). Além de todo o processo, e de virar a madrugada desenvolvendo \o/, conheci várias plataformas e API’s da MasterCard (https://developer.mastercard.com/portal/dashboard.action) porém a plataforma chamada Simplify Commerce foi uma das que mais se destacaram, ela oferece uma solução muito completa de processamento de cartões, com features como: criação de clientes, pagamento recorrentes, estorno e a transação do cartão em sí. Com ela desenvolvemos toda uma integração e a possibilidade de comprar produtos utilizando um app no celular, sem que nenhuma parte de nosso sistema tivesse que armazenar o cartão e em poucas horas.

A idéia deste post é mostrar um pouco quais os principais recursos da API do Simplify Commerce e além disto seu SDK em .NET. Lembrando que eu ainda não cheguei a utilizar ela em produção e que ela só está disponível no EUAs e Irlanda.

Simplify Commerce

Todo o cadastro e a documentação da Simplify Commerce está disponível em https://www.simplify.com/commerce/, para começar a utilizar como desenvolvedor é necessário fazer o cadastro, com isto teremos acesso as API’s Keys (em um ambiente de sandbox) e também ao dashboard da Simplify Commece.

Continue reading

Codificando Night Week: Performance Web com ASP.NET MVC

Performance é uma fator de sucesso ou fracasso para nossas aplicações, seja para melhorar a experiência do usuário ou para diminuir o uso de recursos computacionais ela é muito importante. Veja nesta apresentação os principais fatores e as principais técnicas para melhorar a performance de nossas aplicações web.

 

Evento: https://www.youtube.com/watch?v=TLHvLgdeF3w

Github:

https://github.com/rodolfofadino/DemoFrontEnd

https://github.com/rodolfofadino/DemoIISThread

Entity Framework, performance e uso de índices em cenários de grandes volumes

O Entity Framework é um ORM extremamente completo, que traz diversos recursos como: testabilidade, implementações assincronas(Await e Async), configurações baseada em codigo(code-based configuration), mapeamento para store-procedures, migrations e até interceptores e logs para as consultas.

Porém em cenários como quado configuramos o mapeamento do objeto manualmente, ou mesmo cenários em que o volume de dados ou requisições é grande, olhar e analisar a consulta que o Entity Framework gera é muito importante para indentificar possiveis gargalos ou melhorias. Tenho utilizado o EF com sucesso em várias aplicações, tive alguns problemas que foram gerados por como o banco estava estruturado e como eu fiz a configuração do mapeamento.

Neste post vou mostrar como é possivel analisar a consulta SQL que é gerada pelo EF,  mostrarei também um exemplo prático de como isto foi útil em um problema que tive.

Continue reading

ASP.NET MVC 6 – View Components

Um conceito novo que o ASP.NET MVC 6 traz é o View Components, cuja ideia principal é ser algo parecido com uma partial view, porém com muito mais recursos como testabilidade, isolamento de conceitos. Basicamente é possível fazer uma comparação como um mini controller, que é responsável pela renderização de um bloco só da pagina. Exemplos de uso: dados do usuário, menus customizados, informações de últimos produtos, promoções, algo que possua uma lógica e implementação um pouco mais complexa que uma Partial View.

A estrutura básica de um View Component é composta de uma classe (geralmente que herde de ViewComponent) e um arquivo Razor.

Classe

Uma classe de View Component pode ser criada e configurada das seguintes maneiras:

  • Herdando de ViewComponent
  • Decorando a classe com o atributo [ViewComponent], ou herdando de uma classe que tenha este atributo
  • Criando uma classe com o padrão de nome que termine com ViewComponent. Ex: UltimasNoticiasViewComponent

Continue reading

C# e PowerShell – objetos IDisposable

Alguns meses atrás automatizei um processo de deploy utilizando PowerShell, basicamente ele tirava servidor por servidor do NLB, sincronizava os arquivos e realizava alguns GET’s em um lista de urls. Para realizar a requisição web, eu optei por criar um objeto do tipo System.Net.WebRequest, e realizar a requisição. Porém notei que o processo travava, demorava muito e até retornava timeout, quanto tinha mais de uma url para testar.

Abaixo segue um exemplo do código que apresentava timeout:

Sem Dispose

$urls=("http://www.google.com.br","http://www.google.com.br","http://www.google.com.br","http://www.google.com.br","http://www.google.com.br","http://www.google.com.br","http://www.google.com.br","http://www.google.com.br","http://www.google.com.br","http://www.google.com.br")

foreach($item in $urls){
    $request = [System.Net.WebRequest]::Create($item)
    $response=$request.GetResponse()
    $response.StatusCode
}

Continue reading

MongoRepository

Recentemente estava desenvolvendo uma aplicação que logava a exibição de certos tipos de publicidade e intervenção para os usuários, como infraestrutura de banco de dado, optei por usar o MongoDB, para aceso a dados, utilizei um projeto que já era utilizado em outras aplicações da empresa, o MongoRepository, que é uma biblioteca que implementa o padrão Repository em cima do driver oficial para C# do MongoDB.

Continue reading

Testes em C# com internal, private e protected (modificadores de acesso)

O uso de modificadores de acesso é extremamente importante para isolar e garantir a separação, organização e uso correto de nossas classes, métodos ou propriedades.

No C# existem diferentes modificadores de acesso:

  • public: acesso irrestrito.
  • protected: o acesso é limitado a classe ou a tipos que derivem da mesma classe.
  • internal: o acesso é limitado ao assembly.
  • protected internal: o acesso é limitado ao assembly, a própria classe ou a tipos derivados dela.
  • private: o acesso é limitado a própria classe.

Com isso, é muito comum em cenários de implementação de testes ter que acessar alguns objetos que estão protegidos, ou inacessíveis de acordo com os modificadores de acesso. Continue reading

Dica: C# Debugger Display Attributes

Desenvolver classes e métodos com nomes que realmente expressem o que aquela estrutura faz é responsabilidade do nosso dia a dia como desenvolvedor. Porém em alguns cenários o debug de um código pode ser facilitado com o uso de Debugger Display Attributes, com eles é possível configurar como o objeto será exibido durante o debug, para isso vamos utiliza a namespace System.Diagnostics.

DebuggerDisplayAttribute

Com este atributo é possível configurar tanto o nome que a classe aparecerá no debug, como acessar algumas propriedades do objeto.

Continue reading

Testes com Moq e Entity Framework Async (EF6)

O Entity Framework possui diversos recursos que facilitam o desenvolvimento, um dos recursos que considero muito importante é a possibilidade de realizar queries de maneira assíncrona (http://msdn.microsoft.com/en-us/data/jj819165.aspx). Escrevi um post mostrando algumas maneiras de implementar testes com Entity Framework (Testes com Moq e Entity Framework (EF6)).

A ideia deste post é mostrar como implementar testes em cenários de queries assíncronas, como no post anterior vou continuar utilizando Moq e terei como base o projeto que publiquei no GitHub: https://github.com/rodolfofadino/TestesComMoqEEntityFramework

Para começar, no LivroService.cs vou criar um método que chamará GetLivrosAtivosAsync, deixando a classe da seguinte maneira:

Continue reading

Testes com Moq e Entity Framework (EF6)

Recentemente estava implementando um projeto utilizando TDD, onde as principais regras de negócios se baseavam em consultas e filtros aplicados ao banco de dados, por exemplo: “retorna todos os descontos ativos (select * from descontos where status=1 and datafim>getdate()”.

Pensando em uma abordagem para garantir a implementação destas diversas regras, acabei optando por utilizar o Entity Framework (EF6) para o acesso aos dados e o Moq como framework de mock.

Moq

O Moq é um framework para mock extremamente poderoso, que ajuda a simular o comportamento e ações de objetos de uma maneira controlada. Com ele é possível simular o retorno de um método de um objeto, e ainda realizar diversos testes como quantidade de get ou set em uma determinada propriedade, ou até mesmo verificar quantas vezes determinado método do objeto foi chamado.

Continue reading