.NET Core e Cache: Memory Cache

Um dos fatores de sucesso de uma aplicação em termos de performance e de escalabilidade é a maneira de como foi desenvolvida uma estratégia para poder economizar/poupar algumas atividades como acesso a disco, banco de dados e operações que consumam muito CPU.

O Cache é um recurso muito importante para estes fins, com ele evitamos que certas partes de código sejam executadas várias vezes de maneira desnecessária. Por exemplo: não se faz necessário para cada usuário do seu site que você consulte o banco de dados ou um xml para montar a estrutura do menu, para este fim você pode definir um tempo de atualização e guardar a informação do menu  em um cache (em memória por exemplo) evitando assim IOs desnecessários.

Continue reading

ASP.NET 5 + Kestrel + Nginx e Ubuntu: configurando um ambiente de produção

Uma das grandes mudanças no desenvolvimento do ASP.NET 5 é a de que ele é suportado em múltiplas plataformas (Windows, Linux ou Mac), além de possuir o ambiente de desenvolvimento suportado nestas plataformas, o ambiente de produção também está sendo desenvolvido para que possamos fazer deploy de nossas aplicações em ambientes diferentes, como por exemplo em um Linux.

Montei um ambiente (ASP.NET 5 + Linux) para realizar alguns testes de performance e estabilidade, a ideia deste post é mostrar um pouco o que precisei fazer para configurar e deixar o ambiente ok.

Continue reading

Contribuindo com a documentação do ASP.NET 5

O ASP.NET 5 é um projeto open source e cross-plataform, todo seu desenvolvimento está sendo feito no GitHub (incluindo varias contribuições e feedbacks da comunidade de desenvolvimento). Considerando esta nova mentalidade e abordagem de trabalho, o time do ASP.NET escolheu uma plataforma para escrever e manter a documentação deste framework.

Continue reading

ASP.NET MVC 6 – JSON Helper

O ASP.NET MVC 6 é que ele traz diversos recursos e implementações que já eram necessárias para nossos projetos, e que muitas vezes resolvíamos com uma implementação customizada de alguma parte do projeto ou helper. Apesar dele resolver varias coisas que fazíamos com nossas implementações, acredito que o ASP.NET MVC ter este paradigma de um framework plugável é sensacional, e muito importante. A ideia deste post é mostrar um helper para serializar JSON na View.

JSON Helper

Algumas vezes em nossos projetos temos que passar informações para o javascript ou para alguma api através do html que a View está gerando, como por exemplo passar os dados de checkout de uma transação para uma api de tracking. Nestas ocasiões geralmente escrevíamos o objeto item por item ou transformávamos ele em JSON ele antes de retornar para a view.

Continue reading

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

ASP.NET MVC 6 – Inject (injetando um serviço em uma View)

Uma feature bem interessante do ASP.NET MVC 6 é que ele traz um container padrão para injeção de dependência(é possível alterar o container e configurar), entrarei em maiores detalhes sobre com funciona esta injeção de dependência em um próximo post. Neste post eu queria mostrar a possibilidade de injetar um serviço (uma classe) em uma View, e utilizar todos os recursos dela e do razor, incluindo async e await, para isto só precisaremos criar uma classe, registrar ela no injetor de dependência e utilizar um statement novo no razor, o “inject”  \o/

Continue reading

ASP.NET MVC 6 – TagHelpers

O Razor trouxe uma sintax muito mais simples para se utilizar no desenvolvimento web, com ele deixamos de utilizar os “<% %>” que eram necessários na view engine .aspx (Web Forms). Porém ainda era necessário converter e mudar o html puro para utilizar alguns helpers como:

@Html.LabelFor(model => model.Nome, new { @class = "control-label col-md-2" })
e
@Html.EditorFor(model => model.Nome)

para renderizar coisas simples como:

<label class="control-label col-md-2" for="Nome">Nome</label>
e
<input class="text-box single-line" id="Nome" name="Nome" type="text" value="">

Continue reading

ASP.NET MVC 6 – Razor com suporte ao Async e Flush

O Razor é uma view engine extremamente poderosa, com uma sintax simples e limpa de utilizar. Entre as novidades do ASP.NET 5 estão varias melhorias desta view engine (lembrando que o Razor é uma view engine independente do ASP.NET MVC, sendo utilizada para varias outras coisas).

Entre os principais recursos novos estão o suporte ao Async e o Flush parcial da resposta do html para o usuário, a idéia deste post é mostrar um pouco como estão estas duas novas features.

Async e Razor

Uma grande mudança foi a implementação do suporte ao desenvolvimento assíncrono também no Razor, com isto, podemos utilizar métodos ou até a nossa Model com Async, isto pode parecer um pouco estranho para alguns padrões de projetos MVC, mas vale lembrar que além do MVC o Razor é utilizado em varias outras coisas como geração de html para emails, entre outros usos.

Com isto podemos por exemplo, que nossa ViewModel utilize Tasks em propriedades e somente no momento de utilizar estes dados na View utilizamos o Await.

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

Visual Studio 2015: integração nativa com npm, Grunt e Bower

Ontem foi disponibilizado para download a nova versão do Visual Studio 2015 Preview, existem diversas novidades incríveis como: .NET Open Source, CrossPlataform e Visual Studio Community. Além de isto ser uma revolução no ecossistema de desenvolvimento web, o time responsável pelas “web tools” do Visual Studio também fez um excelente movimento, trazendo nativamente a integração com as ferramentas padrões de mercado para desenvolvimento web/frontend. A idéia deste post é mostrar um pouco como ficaram estas features, e se você é um desenvolvedor web, e ainda não conhece o npm (Node Package Manager), Grunt e Bower, corra atrás para aprender como elas funcionam, pois estas tecnologias já são o presente do mercado de desenvolvimento web.

Ferramentas envolvidas

image

  • node.js: plataforma JavaScript construída sobre o runtime do Chrome, tem como objetivo o rápido desenvolvimento, performance e escalabilidade.
  • npm (Node Package Manager): o npm é um gerenciado de pacotes, que utiliza o node.js como plataforma para execução, tanto o Bower quanto o Grunt utilizam ele para gerenciar os pacotes que eles instalarão
  • Bower: gerenciador de pacotes para web/frontend, como bibliotecas js e css, notem que o projeto default do ASP.NET MVC 6 deixará de utilizar o NuGet package para pacotes de frontend (jquery por exemplo)
  • Grunt: task runner baseado em JavaScript, é utilizado para automatizar rotinas como geração de .min e outras automatizações (também é possível utilizar o Gump)

Continue reading

Implementando Rate Limit e Throttling com Web API usando WebApiThrottle

Com a diversificação de devices e plataformas (mobile, wearable, sites, etc) os dados de nossas aplicações, regras de negocio e ações estão sendo expostos utilizando API’s HTTP. O ASP.NET Web API é um excelente framework de desenvolvimento para serviços HTTP, possuindo recursos como roteamento model binding, serialização, segurança, hospedagem entre outros.

Uma necessidade bastante comum neste cenário é  de controle do uso destas APIs, como por exemplo o numero máximo de requests que um cliente pode realizar em um determinado range de tempo (rate limit, throttling). Para isto existem diversas maneiras de realizar este gerenciamento, como por exemplo proxies(que ficam como um

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

ASP.NET MVC Display Modes (construindo sites otimizados para mobile)

Com o crescimento de vendas e uso de smartphones, surge a necessidade (já antiga) de otimizar nossas aplicações e web sites para garantir a melhor experiência e entrega de nossos conteúdos, existem varias abordagens no desenvolvimento de web sites para esse objetivo, desde o carregamento de recursos sobre demanda, a modificação visual através de CSS e media queries, e outras diversas técnicas, como por exemplo a entrega de um site totalmente diferente em um subdomínio (m.exemplo.com.br).

Design Responsivo, Conteúdo Dinâmico ou Mobile Url?

O Google possui um material com recomendações para desenvolver um site que seja otimizado para ser acessado por diversos dispositivos móveis (https://developers.google.com/webmasters/smartphone-sites/details).

Nele existem três principais modelos: Continue reading

Cache + .NET: Cache HTTP (aumente a performance de seu site)

O Cache HTTP é um recurso extremamente importante e disponível em qualquer plataforma de desenvolvimento web, neste quarto post da série de Cache + .NET vou apresentar o funcionamento do Cache HTTP e as principais maneiras de implementa-lo utilizando .NET.

Front End (80-20)

Para falar sobre Cache HTTP, vou começar com uma frase sobre performance de front end, de um dos maiores especialitas em web performance.image

“…somente 10-20% do tempo total do carregamento de uma página é gasto para receber o HTML do servidor para o navegador. Você precisa focar nos outros 80-90% se você quiser tornar suas páginas visivelmente mais rápidas…”

(Steve SoudersHigh Performance Web Sites)

Neste livro Steve Souders explica 14 regras, que são boas práticas para aumentarmos a performance de nossos sites, configurar e utilizar o Cache HTTP nos ajuda a evitar downloads de recursos e conexões desnecessários com o servidor. Continue reading