O Ponto e vírgula e o Javascript;

Quando procuramos informações, posts, comentários, etc. sobre ponto e vírgula no javascript, não é incomum nos depararmos com discussões onde pessoas apontam que o ponto e vírgula é completamente inútil. Por outro lado, há pessoas que advogam que o ponto e vírgula é realmente obrigatório, independente das regras de ASI. Realmente é muito difícil nos depararmos com algum tipo de problema relacionado ao assunto, mas eu acredito que é sempre bom procurarmos entender o funcionamento das linguagens do dia a dia, principalmente o javascript, que está cada vez mais presente em todas as tecnologias que utilizamos.

logo-javascript

Podemos notar que, em casos como um simples:

console.log('console.log com ponto e vírgula');

Funcionam exatamente como:

console.log('console.log sem ponto e vírgula')

Isso acontece justamente por conta das regras de inserção automática de ponto e vírgula. Em casos como este, independente da sua linha de pensamento, das suas convicções, etc, o código vai funcionar exatamente como esperado. Então vamos analisar uma das regras para que isso aconteça:
Continuar lendo

Validando as suas ViewModels no asp.net mvc com FluentValidation

É comum, quando trabalhamos com asp.net mvc, utilizarmos as anotações presentes em System.ComponentModel.DataAnnotations. Conseguimos um resultado bacana, validamos de maneira simples as nossas view models e o código fica relativamente simples. Um exemplo simples do que eu estou falando é o seguinte:

Imagine que temos o clássico LoginModel, contendo o usuário, senha e a url de retorno após o sucesso no login:

    public class LoginModel
    {
        public string Email { get; set; }
        public string Senha { get; set; }
        public string ReturnUrl { get; set; }
    }

Após identificarmos que os campos Email e Senha são obrigatórios, podemos rapidamente resolver este problema adicionando um [Required] para cada propriedade obrigatória:
Continuar lendo

Utilizando o Lucene e Azure Websites

Neste post eu vou falar como utilizar o Lucene.Net em uma aplicação hospedada no Azure. Para quem ainda não conhece, o Lucene.Net é um port feito do projeto Apacha Lucene e tem como objetivo realizar full-text search de maneira performática. Ele foi inicialmente escrito em Java, porém recebeu um port linha por linha para o .Net (por isso, muitas vezes o lucene.net não parece ser muito idiomático para quem está escrevendo código em .net).

Para começar, é necessário instalar tanto o Lucene.net, quanto o AzureDirectory:


Install-Package Lucene.Net
Install-Package Lucene.Net.Store.Azure

A grande diferença que acontecerá é passar a utilizar a classe AzureDirectory no lugar de um FSDirectory ou RAMDirectory. O que a classe AzureDirectory fará é utilizar um Windows Azure Blob Storage no lugar de um diretório local, ou a própria memória do computador.

        public void Indexar(string conteudo)
        {
            using (var directory = new AzureDirectory(CloudStorageAccount.Parse(ConfigurationManager.AppSettings["FilesStorageConnectionString"])))
            using (var analyzer = new StandardAnalyzer(Lucene.Net.Util.Version.LUCENE_30))
            using (var writer = new IndexWriter(directory, analyzer, false, MaxFieldLength.UNLIMITED))
            {
                var document = new Document();
                document.Add(new Field("Conteudo", conteudo, Field.Store.YES, Field.Index.ANALYZED));

                writer.AddDocument(document);
                writer.Flush(true, true, false);
            }
        }

Note que “FilesStorageConnectionString” é a conexão do seu blob storage no Azure. Note que tirando a utilização do AzureDirectory, o código é exatamente igual a qualquer implementação de indexação / procura no Lucene.Net.

Por hoje é só😉

Testando suas classes com FluentAssertions

Como as coisas andam corridas ultimamente e não tive tempo para continuar com os estudos/posts sobre o novo asp.net 5, que na verdade agora chama-se ASP.NET Core 1.0 (mas isso é assunto para outro post. Caso queira saber mais, confira este post do Scott Hanselman), resolvi criar um post rápido falando sobre o FluentAssertions. O FluentAssertions é um conjunto de extension methods que, segundo o site oficial diz, permite especificar de maneira mais natural o resultado esperado de um teste no estilo TDD/BDD. Para saber se você pode utilizar ou não o FluentAssertions, segundo o próprio site deles, este pacote possui suporte para as seguintes versões do .net framework:
Continuar lendo

Começando com ASP.NET 5 – Adicionando novos projetos e testes com xunit

Bom, agora que já entendemos um pouco do ambiente do asp.net 5, configuramos o necessário, etc., vamos começar a desenvolver o nosso projeto efetivamente. Como a missão principal destes posts e do que está sendo desenvolvido é o asp.net 5, não se preocupem muito com a arquitetura. Afinal, se não fosse para entendermos como está o novo ambiente, bastaria criarmos um projeto através do visual studio 2015 que já teríamos mais do que temos agora. Acredito que o mais importante ao começarmos com uma tecnologia nova, ou como no nosso caso, uma nova versão da tecnologia, o mais importante é entender como funciona, quais são as idéias por trás do que estamos estudando, etc. Como o nosso sistema é sobre finanças pessoais, vamos começar pensando em nosso domínio. Para isso, vamos alterar um pouco da estrutura do nosso projeto. Até agora, estávamos utilizando a estrutura default gerada com o yeoman. Ou seja, tínhamos a pasta Finance e todo o código dentro desta pasta. Vamos passar a utilizar as paras src e test, como é o padrão gerado pelo Visual Studio 2015, e dentro da pasta src, adicionar as pastas dos projetos. Não precisamos de nenhuma ferramenta para isso, basta criarmos as pastas na mão. Crie as pastas src e test, e um arquivo chamado global.json:
Continuar lendo

Começando com ASP.NET 5 – wwwroot, bower e gulp

Bom, como já temos o nosso projeto, já conseguimos rodá-lo, etc, agora precisamos adicionar uma view. Já vimos que a estrutura continua igual, mesma convenção, etc. A diferença agora, é que todo o conteúdo estático, como arquivos javascript, imagens, etc, ficam na pasta wwwroot. Esta pasta representa a raiz do seu sistema e serve basicamente para servir conteúdo estático. Você não precisa mais se preocupar se o web.config, ou algum arquivo de log, etc está acessível ou não em sua aplicação. Se não está na pasta wwwroot, ele não será exposto! Agora vamos criar de verdade a nossa primeira view. Para isso, vamos começar vendo o bower.

bower

A intenção aqui não é dar uma longa aula sobre o bower, mas vamos começar entendo o que ele é: um gerenciador de dependências client side. Você pode encará-lo como um nuget para o seu front end. Se precisamos do Entity Framework por exemplo, não vamos ao nuget para utilizá-lo? Caso você queira utilizar jquery e bootstrap por exemplo, você vai utilizar o bower.
Continuar lendo

Começando com ASP.NET 5 – arquivos de configuração, console logger

Vamos continuar com o nosso projeto. Vamos agora adicionar logs para o nosso server. É sempre útil vermos os logs enquanto desenvolvemos. Poder ver algum erro, o que está sendo chamado, etc. Para isso, vamos adicionar a dependência de ILoggerFactory em nosso project.json.

"Microsoft.Extensions.Logging": "1.0.0-rc1-final",
"Microsoft.Extensions.Logging.Console": "1.0.0-rc1-final"

E agora podemos adicionar a dependência de ILoggerFactory em nosso método Configure, dentro de Startup.cs:

public void Configure(IApplicationBuilder app, ILoggerFactory loggerFactory)
{
    loggerFactory.AddConsole(minLevel:LogLevel.Verbose);
            
    app.UseMvc(routes =>
    {
        routes.MapRoute(
            name: "default",
            template: "{controller=Home}/{action=Index}/{id?}");
    });
}

Com isso, estamos registrando os eventos no console do nosso servidor. Note que agora ao acessarmos uma página, podemos conferir o que está acontecendo por de baixo dos panos:
Continuar lendo