Postagens

Versão 1.0.1 do NHilo!

Hoje o post é para falar que está disponível a primeira versão estável da biblioteca NHilo ( http://nhilo.codeplex.com/ ), componente para se gerar chaves primárias utilizando o algoritmo hilo do NHibernate! As mudanças que ocorreram entre a versão beta e esta são: Inclusão de providers para trabalhar com MySQL e Oracle. Criação de um método de extensão para retornar um valor inteiro de 32-bits ao invés de um inteiro de 64-bits. Mudanças de algumas classes para o namespace raiz. Correção de alguns bugs referentes ao schema de configuração. Por enquanto é só. A biblioteca pode ser baixada tanto nosite do Codeplex quanto pelo Nuget ( www.nuget.org ). []'s

Usando o padrão Decorator (GoF)

Imagem
O padrão Decorator, do livro Design Patterns: Elements of Reusable Object-Oriented Software , é útil quando precisamos adicionar um comportamento em uma classe já existente. Vamos demonstrar isso através de um exemplo de uma classe de acesso ao banco de dados onde será adicionado o uso de cache. Primeiro temos  nossa classe que acessará o "banco de dados". Na verdade, a nossa base nada mais é que um array em memória. Optei por fazer assim para manter a simplicidade do exemplo e focarmos no que realmente é importante. Além disso, a busca demora propositadamente 3 segundos para simularmos todo o trabalho de se acessar um recurso externo à aplicação como um banco de dados. // RepositorioConfiguracaoImpl.cs using System.Collections.Generic; using System.Threading; namespace ExemploDecorator { public class RepositorioConfiguracaoImpl : IRepositorioConfiguracao { private readonly Dictionary<string, string> _configuracoes = new Dictionary<string, str...

NHiLo - Gerador de chaves primárias (substitutas)

Imagem
Hoje subi pela primeira vez um pacote Nuget para o seu repositório oficial. Trata-se de um pequeno componente de código aberto que eu fiz para permitir a geração de chaves primárias para registros sem a dependência do banco de dados para isso. Leia-se: NÃO PRECISAR MAIS DE COLUNAS DE AUTO-NUMERAÇÃO COMO IDENTITY. O uso de colunas do tipo identity são uma das poucas coisas que eu torço o nariz sem antes saber o motivo porque foi escolhido essa abordagem para chaves substitutas. Não gosto porque esse tipo de campo dificulta se precisarmos manter bases sincronizadas, pois o ID da coluna pode ser diferente em cada uma delas. Este componente é uma implementação isolada do algoritmo HiLo, famoso no NHibernate. Não é nada novo no mundo do desenvolvimento (e todo o crédito para os desenvolvedores do Hibernate/NHibernate), mas que não encontrei uso disponível fora desse framework de ORM. Inclusive esse foi o motivo de eu criá-lo: poder usar o HiLo em uma situação que eu não posso traba...

Por que tá dando erro?

Hoje um colega de trabalho me mandou o seguinte código, trecho de um teste de unidade. var objeto = null; Assert.IsNull(objeto.atributo); O questionamento era "por que tá dando erro?". Que coisa, né? Tá dando erro... []'s

Injeção de Dependência em ASP.NET Webforms

Muito do material que vemos pela Internet a respeito de Inversão de Controle e Injeção de Dependência está relacionado ao ASP.NET MVC. Hoje o meu objetivo aqui é mostrar como fazer uso de um contêiner de IoC com o "patinho feio" do ASP.NET, o Webforms. Mas antes, vamos contextualizar o que é Inversão de Controle e Injeção de Dependências. Inversão de Controle é um conceito de programação onde é tirada a responsabilidade de uma classe em criar as suas dependências. Vejamos o código abaixo. Nele, a página ASP.NET (que é uma classe) instancia uma classe chamada SaudacaoPTBr e chama seu método Saudar para retornar uma informação qualquer. Por isso, esta página depende de SaudacaoPTBr. Perceba que para utilizar essa dependência, a página ASP.NET teve que, no seu próprio código, criar um objeto do tipo SaudacaoPTBr. public partial class _Default : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { var saudacao = new SaudacaoPTBr(); ...

Paginação de registros no SQL Server

Imagem
Hoje vou comentar uma solução para paginar dados no SQL Server. A paginação é útil quando precisamos retornar uma grande quantidade de informações pouco à pouco. Vamos supor que tenhamos que trafegar 100.000 registros através de uma chamada de web service. Dependendo da rede e do tamanho dos dados, podemos ter problemas se tentarmos passar todos esses dados de uma vez só (problemas do tipo cair a rede no meio da transferência e perdermos todo o trabalho). Ao invés disso, podemos tentar passar 5.000 em 20 vezes, ou seja, em 20 páginas. Isso também é válido quando precisamos apresentar muita informações na tela do usuário, e ao invés de trazer todos os registros, trazemos eles pouco à pouco de forma que permita a análise da pessoa. Nas situações acima, poderíamos carregar todos os registros em memória e nós mesmos fazermos a paginação, só que isso é ruim visto que vamos alocar todas as informações na memória sendo que só iremos utilizar uma pequena fração dela. Para resolver...

"Sacaneando" a OOP - chamando métodos não públicos em .NET

Imagem
Olá, pessoal. Hoje vou demonstrar aqui como burlar as regras da Orientação a Objetos em relação ao escopo, ou seja, conseguir chamar um método privado fora da sua classe, por exemplo. A ideia desse post veio de uma necessidade que tive em acessar o conteúdo do viewstate de uma página ASP.NET a partir de um user control. ViewState é um artifício criado para o ASP.NET Webforms para se permitir simular a manutenção de estado entre as várias requisições à páginas web (visto que tradicionalmente a abordagem de trabalho com web é stateless). Vamos dar um exemplo. Suponha que eu tenha um grid em uma página ASP.NET, e então eu queira definir uma ordenação para uma coluna qualquer desse grid. Logicamente, na próxima vez que eu quiser fazer uma requisição para essa página, vou querer que essa ordenação que eu fiz continue. É nesse caso que entra o viewstate, pois será nele que essa informação de ordenação será armazenada. Na prática, o viewstate é um campo do tipo hidden, no qual o ...