domingo, 4 de dezembro de 2011

Trabalhando com Enum em C#

Muita pessoas desconhecem o poder que um Enum possui, sem falar que as poucas pessoas que fazem uso dele, não sabem aproveitar todas as sua possibilidades.
Utilizar Enum na implementação de software server para facilitar o desenvolvimento, sem falar que com a tipagem você impede erros de programação.

Vamos a um caso básico de Enum:
Campo estado civil: Normalmente esse campo está representado diretamente como uma coluna no banco de dados, com os tipos Char, tinyInt (Falando em SqlServer), porem na implementação do sistema, não sabemos qual é o range do campo, ficamos sempre na duvida: Solteiro, Casado, Divorciado e Viuvo ou 0-Solteiro, 1-Casado, 2-Divorciado e 3-Viuvo.
Particulamente prefiro o uso de inteiros, então quando tenho que fazer campos com valores enumerados no banco sempre uso inteiros, seja para criar campos de status, estado civil etc.
Vamos a primeira implementação:
public enum EstadoCivil
{
    Solteiro = 0,
    Casado = 1,
    Divorciado = 2,
    Viuvo = 3
}
A primeira funcionalidade que fica desconhecida da maioria é o valor para cada item do Enum, quando colocamos o valor para os itens da coleção podemos recuperar fazendo uma cast simples:
Console.WriteLine("{0} - {1}"EstadoCivil.Casado.ToString(), 
(int)EstadoCivil.Casado);
ou
Console.WriteLine("{0} - {1}"EstadoCivil.Casado.ToString(), 
                  EstadoCivil.Casado.ToString("D"));

terça-feira, 6 de setembro de 2011

Dificuldades na Instalação do Ambiente de Desenvolvimento Android

Falando em Ambiente de Desenvolvimento Android, sempre encontramos problemas a configuração do mesmo. Nesse post vou mostra os problemas que tive que enfrentar na configuração Eclipse/Windows/Android-SDK.

1º Maquina virtual não encontrada

Esse problema ocorre desde versão 1.6.12, isso ocorre devido a não configuração da variável de ambiente JAVA_HOME.



quinta-feira, 10 de fevereiro de 2011

Ciclo de vida do ASP.Net

Umas das primeiras coisa que um desenvolvedor ASP.net deve saber é o caminho que uma requisição a paginas ASP.net faz. Já perdir as contas de quantas vezes fui dar suporte a desenvolvedores com problemas ao utilizar componentes Web no método Page_PreInit.
O ciclo de vida de uma pagina AspNet pode ser dividida da seguinte forma:

segunda-feira, 31 de janeiro de 2011

Bancos de Dados Embutidos

Estou trabalhando em um software de monitoração, o intuito é que esse software seja capaz de monitorar processos (serviços) instalados dentro do Park de computadores de onde eu trabalho. Contudo, levantando as necessidades (requisitos) deste software encontrei um requisito essencial para a qualidade deste software, como armazenar as informações dos processos monitorados, e mais, como guarda o histórico desse processo.

A resposta básica e direta a esse problema foi: Banco de Dados, mas existe uma premissa nesse software onde: "ele não pode depender de outros softwares", como eu vou conseguir gravar as informações/histórico do processo em banco de dados, se o banco parou?

segunda-feira, 18 de janeiro de 2010

Variável Readonly vs Constante


Estava me perguntando qual a diferença entre uma variável readonly e uma constantes. Achei uma explicação ótima no livro Effective C#: 50 Specific Ways to Improve Your C#. Existem 3 diferenças entre elas:
1° Desempenho – constantes são registradas em tempo de compilação por isso são mais rápidas, já as variáveis readonly são registradas em tempo de execução.
Isso me faz lembrar o motivo de se chamar “variável readonly” se ela só possui um valor.
Essas “variáveis” podem receber seu valor no momento da criação da classe, por isso uma variável readonly do tipo static é no mínimo muito estranho, se campos static não são “instanciados” seu valor vai ser único e definido na escrita do código*.
2° Tipo de valor – Constantes recebem apenas valores primitivos, ou seja, int, string etc. Já as variáveis readonly são mais flexíveis, pode receber qualquer tipo de valor.










3° Atualização de versão – Lembra quando eu falei sobre o tipo de registro das constantes (compilação) e variáveis readonly (execução). Imagine a situação onde você tem um assembly que utiliza uma constante, tipo um enumeration como os tipos sanguíneos**. Com isso qualquer aplicação que faz uso do assembly basta atualizar a DLL para fazer uso dos novos valores.  Errado! Todos os projetos precisam ser recompilados, as constantes também são registradas nas DLL nas quais são usadas. Por isso se o assembly que faz uso da DLL não for recompilado, o valor utilizado por ela oriundo da constante vai continuar sendo o  antigo.

* é possivel ter uma varivel static onde seu valor é dinâmico (para o primeiro uso, mas isso é um outro post):


public static readonly DateTime _testRead = DateTime.Now.AddDays(5);

** foi só um exemplo :)

quarta-feira, 13 de janeiro de 2010

resolvendo problema de nameSpace "Using alias directives"

     Hoje vamos falar de diretivas de Alias ou “Using alias directives”, de inicio esse recurso me pareceu ser uma funcionalidade sem uso pratico. Pense bem para que eu vou colocar um apelido a um namespace que e digitado uma vez no código. O Visual Studio deixou esse recurso sem qualquer uso pratico, simplesmente por ser mais pratico digitar o nome da classe é a IDE completar para você.
     Contudo esse recurso é bem pratico, quando você encontra um pequeno dilema “qual namespace usar”? Quem já se encontrou com uma Classe que existia em mais de um namespace? Tenho a classe “X”, mas essa classe “X” também existe em outro namespace, a IDE no momento de resolver esse namespace liberar como possibilidade de uso apenas o nome completo da classe, ou seja, “namspace.X” em todos os lugares que você tenha de chamar a classe.
          using MyClass = MyClass.Space.Space.MyClass;
Com isso você vai poder definir classe que você vai querer usar