terça-feira, 3 de agosto de 2010

Boas práticas(best practices) e atalhos visual studio 2008

Bom gente hoje trouxe algumas boas práticas que usamos quando estamo codificando, para que o código fique mais legível e organizado.

Nome de classe : utilizamos primeira letra maiuscula de cada palavra ( ex: ClienteIncluir )
Propriedades : idem
Atributo : utilizamos primeira letra minuscúla da primeira palavra e as outras primeiras letras maiusculas ( ex: clienteNome )
namespace : utilizamos [nome da companhia].[Departamento].[Aplicação].[Camada] ( nunca se esquecendo do ponto)

Atalhos
CTRL + Shift + B -> Build ( Compilar )

F9 -> Seta breakpoint

CTRL + F5 -> Build sem depuração

F11 -> passa passo-a-passo apartir do breakpoint colocado entrando em todos os métodos.

F10 -> passa passo-a-passo apartir do breakpoint colocado mas não entra nos métodos.

Shift + F9 -> Quick Watch , serve para visualizar ou modificar valores em tempo de execução

CTRL + K + U -> Comenta

CTRL + K +C -> Descomenta


dica: clicando com o botão direito em cima do projeto e escolhendo a opção “Clear”, irá limpar os assembly e temporários.

segunda-feira, 19 de julho de 2010

Empresas que contratam com uma mentalidade burra!

Peguei essa post no blog do Giovani, ele conversando com o Victor Cavalcante e com o André Dias e o André contou uma história interessante. Ele contou como, uns anos atrás, foi trabalhar com o Fabio Galuppo. Segundo ele, o anúncio do Fabio era mais ou menos assim:

"Quer trabalhar em uma empresa parecida com a Microsoft? Quer trabalhar de bermuda, e com horário flexível? Entre em contato conosco."

De imediato lembrei do anúncio que a Globo.com colocou na sua palestra do Scrum Gathering. Havia um desse em cada cadeira onde os congressistas sentaram:

"Cansado de apertar parafusos? Agora você poderá participar do processo criativo, colaborando com suas idéias em um time multidisciplinar formado por desenvolvedores, dbas, sysadmins, designers, testers. Você vai especificar e implementar esses sistemas, além da manutenção evolutiva e corretiva dos produtos atuais.


(…)


Cansado de ficar preso na jaulinha? Aqui temos diversas máquinas no laboratório para testarmos o que precisa ser feito. Ninguém vai censurar sua internet, e, se você quiser, pode instalar a sua distro preferida. E ainda damos apoio para o desenvolvimento de projetos pessoais. Suas idéias podem virar grandes projetos na Web."



E olha que está resumido. O panfleto ainda cita diversas outras coisas interessantes.

Vocês tem idéia da quantidade de currículos que o Galuppo deve ter recebido? Se você está em busca do top 5%, você precisa de pelo menos uns 20 candidatos para achar 1 do top 5. Não é fácil. O André, que hoje trabalha na Microsoft, contou que na época podia trabalhar de bermuda, com exceção apenas para os dias em que recebiam clientes na empresa. Tinha horário flexível, podia trabalhar de casa, fazia o que gostava, e ainda ganhava para isso!

E na Globo.com, o que vocês acham que vai acontecer? Eu sei de uma coisa: eles vão precisar de um guarda-chuva, vai chover currículo.

Quantidade não é qualidade, mas, para selecionar um profissional de qualidade este profissional precisa, no mínimo, querer trabalhar na empresa - ele precisa se interessar por ela.

Enquanto isso grandes bancos colocam o desenvolvedor na "jaulinha". Sei de um que impede qualquer contato com a máquina de desenvolvimento além do mouse, teclado e monitor – O desktop fica em uma sala separada. Há outro onde o desenvolvedor não pode trabalhar de barba (?!), usar nada no bolso da camisa, ou sequer conversar com o colega do lado. Há outra empresa que conheço onde nenhum e-mail do funcionário sai da corporação, e ele também não tem acesso à webmails públicos.

Acho que nem os militares são assim assim tão rígidos. Qual você acha que é a produtividade de times que trabalham desta forma? Será que há times, ou meras agregações de pessoas? Vale a pena tratar desenvolvedores de software como se fossem operários da década de 50? (Vale a pena tratar operários do século XXI como se fossem operários da década de 50?)

Vou mais longe: Qual é o problema de trabalhar de bermuda? De ter horário flexível? De ter cabelo comprido, barba, piercing, etc? Porque gastamos tanto tempo avaliando itens que não tem relação alguma com a entrega? Pior, porque coagimos nossos funcionários a trabalhar infelizes, e, consequentemente, produzirem menos? Nossa tradição se paga? Tradição é um outro nome para pré-conceito quando ela é exercitada sem questionamento.

Cada empresa que trabalhe como quiser, no entanto, umas trabalham melhor que outras. Em um mercado com falta de profissionais, quem dá as cartas não são as empresas. Continuem elas a seguir este modelo ultrapassado, vão ficar com o resto, porque a nata vai trabalhar aonde se sente mais à vontade. Hoje em dia troca-se de emprego em um estalar de dedos. A opção das empresas "tradicionais" vai ser aumentar o salário, para convencer os profissionais a ficarem. Só que isso só funciona por algum tempo. Além disso, nenhum gerente sustenta internamente um custo acima do necessário por muito tempo, isso acaba sendo questionado, e, eventualmente, a empresa se rende. "Se rende". À que? À coerência?

A nova geração, composta de pessoas que estão se formando agora, e que, com 21 anos, nasceram no final da década de 80 e passaram toda sua adolescência no século XXI, também dará muito trabalho para empresas que não focam no resultado, mas nos itens menores que já citei. Essa geração cresceu com internet e liberdade, e chega ao mercado de trabalho questionando esse modelo antiquado. Apenas os submissos vão encarar essa coação, enquanto os criativos buscam uma empresa melhor para trabalhar. Que tipo de profissional você prefere ter ao seu lado?

A geração seguinte, que virá em 5 anos, será ainda mais decidida. Ela terá crescido com a mobilidade total, com o 3G no celular e no notebook. É a informação 100% disponível, 100% do tempo, em 100% dos dispositivos. Será a geração que cresceu 100% conectada.

Como você vê essa questão?

quarta-feira, 7 de julho de 2010

Ferramentas interessantes para programadores

1.P/Invoke.Net Visual Studio Add-in - Um Add in ao Visual Studio que permite consultar diretamente o site pinvoke.net, que traz chamadas de P/Invoke.

2.P/Invoke Interop Assistant - Uma ferramenta que permite traduzir diretamente chamadas de P/Invoke, não é baseada em uma library, como a acima.

3.Fiddler - Sniffer de http, é uma excelente ferramenta na depuração de problemas.

4.Reflector - A ferramenta de engenharia reversa de .Net mais conhecida do mundo (e a melhor, é claro).

5.IE Toolbar - Barra de ferramentas do IE. Permite encontrar elementos no DOM somente clicando neles, ver atributos css e muito mais. Está tendo funcionalidades incorporadas no IE 8.

6.Notepad++ - Um notepad turbinado, com numeração de linhas, coloração de código, entre outras. Jogue seu notepad fora.

7.Windows Powershell - Novo shell da Microsoft, orientado a objeto e candidado a substitudo do cmd.exe. Magnífico.

8.Testdriven.net - Ferramenta para auxílio na criação de testes unitário. Permite rodar qualquer método como um teste, o que é uma grande ajuda.

9.VB Refactor - Refatoração, que só existe no Editor de C# do Visual Studio, para VB.Net.

10.Process Explorer - Uma ferramenta que exibe dados dos processos

11.Resourcer - Uma ferramenta para edição de recursos de localização.

12.Sharedview - Uma ferramenta de colaboração que funciona no Windows Vista e no XP (ao contrário do Netmeeting, que só funciona no XP), e que permite a você compartilhar conteúdo (como documentos e planilhas), compartilhar a visualização de aplicações ao vivo, e chat. Leia mais aqui.

13.Regulazy - O Regulator ajuda a criar as regex, utilizando colorização de código. Ele ajuda também a validar uma determinada string, podendo também utilizar funções de separação e substituição de strings. Leia mais aqui.

14.Regulator - O Regulazy ajuda os preguiçosos (daí o nome) a criar regex. Você digita uma string na janela, e ele deriva uma regex para você. Leia mais aqui.

15.Script # – Uma ferramenta que permite escrever código em C#, e compilá-lo como Javascript, suportando OO, interfaces, heranças, e tudo de bom que vem com elas. Um must.

Como arquitetar um projeto de software (RESPONSABILIDADE UNICA)

Quase todo mundo sabe o que é, mas poucos o definem. Sigo a definição original do Uncle Bob, já que este é um dos seus princípios SOLID. Segundo Mr. Robert C. Martin, o princípio da responsabilidade única define que "nunca deve haver mais de um motivo para uma classe mudar", ou ainda, "uma classe só deve mudar por um único motivo". Mais conhecido como Single Responsibility Principle (SRP).




Pronto, pare de se preocupar se o método/propriedade/evento que você está introduzindo faz parte do objeto ou não. Faça-se esta pergunta: esta classe vai ter que mudar por mais um motivo com esta introdução que estou fazendo? Se sim, o método/propriedade/evento está na classe errada.



O mesmo vale para métodos. Eles devem ter apenas um motivo para mudar.



Assim, se você fez uma classe "produto", e ela abstrai um produto da empresa, então ela só deve mudar se uma das características abstraídas do produto da empresa mudarem. Se, por acaso, a classe de produto mandar e-mail quando um preço subir, essa é uma razão a mais para ela mudar: o método de envio de e-mails pode mudar. Ou se a classe de produtos passar a controlar o estoque: esse é outro motivo para mudar, talvez a maneira de manter o estoque mude.



Qual o resultado disso? Muitos métodos pequenos, com muitas classes pequenas. Muita modularidade. Excelente!



- Mas em OO não devemos colocar dados e comportamento juntos?



Claro! Mas o que isso tem a ver com a história? Eles continuam juntos, mas modularizados. Agora, só porque você criou uma classe de produto, a tal classe tem que ir no banco, se configurar, obter dados, dar desconto, assobiar e chupar cana?



- Mas eu vou ficar com muitas funções pequenas na minha classe. Não vou conseguir entender.



Você já fica com poucas funções gigantes, que são ainda mais difíceis de entender. Depois do quinto nível de identação, ninguém mais sabe se aquele "}" está fechando um "if", um "while", um "for", ou o que for. Ainda por cima, funções gigantes tem um problema sério de efeitos colaterais, mas isso é outro problema. Com muitas funções, cada uma vai fazer só uma coisa, e vai fazer ela direito. É o paraíso do teste unitário!



- Mas eu vou ficar com muitas classes no sistema. Não vou conseguir entender.



Vai conseguir entender sim. Você dá nomes corretos para cada uma. Em vez de criar um "cliente", e lá dentro colocar um código para "AvaliarSePodePromoverParaPremium", você cria a classe cliente, e uma classe de serviço "AvaliadorDeClientePremium", com o tal método "AvaliarSePodePromoverParaPremium". Pronto, duas classes colaborando. Tudo mais modular, o cliente ficou mais fácil de entender, e a tal função "AvaliarSePodePromoverParaPremium" ficou mais fácil de testar (se você estiver trabalhando com abstrações).



Lembre-se desse princípio. É um dos mais importantes que você vai encontrar.

segunda-feira, 28 de junho de 2010

(Invocar função no controle Pai) Delegate Com UserControl.ascx

Primeiro vamos criar o controle ascx

Insira um botão no controle ascx

No código do controle declare um delegate
e um evento dentro da classe.


public

delegate void
delChamarEvento();


public
event delChamarEvento evChamarEvento;




no evento click do botão chame o evento.


this
.evChamarEvento();


Agora vamos para a pagina aspx



Insira o controle dentro da pagina



Note que na parte superior será registrado o controle





<%
@ Register src="uscEventos.ascx"  tagname="uscEventos" tagprefix="uc1" %>




No
meu caso uscEventos é o nome do meu controle





Insira um label na pagina para visualizarmos o resultado


<
asp:Label ID="lblMensagem" runat="server" Text=""></asp:Label>





Crie qualquer metodo na pagina para ser executa pelo controle





public

void ExecutarEvento()

{

         lblMensagem.Text = "Evento do controle  ";      

}







No
load da pagina sobrescreva o evento do controle passando o seu metodo da pagina





protected
void Page_Load(object sender, EventArgs e)

{

    uscEventos1.evChamarEvento+=newcEventos.delChamarEvento(ExecutarEvento);

}





Agora é só testar


Observe que quando clicar no botão do controle, o metodo ExecutarEvento() dentro
da pagina aspx é executado.

Yield?

É algo já não tão novo, apareceu no C# 2.0, e só existe no C#, não existe no VB.

O yield serve para gerar um Enumerable on demand. Por exemplo, se você quiser
criar uma coleção de inteiros rapidamente, como faz? Veja abaixo, com yield:

public static IEnumerable<int> GetNums(int from, int to)
{
    for (int i = from; i <= to; i++)
        yield return i;
}

Legal, né? Para usar é fácil, verificamos com um teste:

[TestMethod()]
public void GetNumsTest()
{
    var nums = Class1.GetNums(2, 5);
    Assert.AreEqual(4, nums.Count());
    Assert.IsTrue(nums.Contains(2));
    Assert.IsTrue(nums.Contains(3));
    Assert.IsTrue(nums.Contains(4));
    Assert.IsTrue(nums.Contains(5));
}

Gosto bastante também do exemplo
do MSDN:

public static IEnumerable<int> Power(int number, int exponent)
{
    int counter = 0;
    int result = 1;
    while (counter++ < exponent)
    {
        result = result * number;
        yield return result;
    }
}

Mais uma vez, para testar:

[TestMethod]
public void PowerTest()
{
    var nums = Class1.Power(2, 5);
    Assert.AreEqual(5, nums.Count());
    Assert.IsTrue(nums.Contains(2));
    Assert.IsTrue(nums.Contains(4));
    Assert.IsTrue(nums.Contains(8));
    Assert.IsTrue(nums.Contains(16));
    Assert.IsTrue(nums.Contains(32));
}

Mas o yield não é para ser usado somente com inteiros, você pode usá-lo para
retornar um IEnumerable de qualquer coisa. Aqui um exemplo com strings:

public static IEnumerable<string> GetWordsUpper(string phrase)
{
    foreach (var word in phrase.Split(' '))
    {
        yield return word.ToUpper();
    }
}

Para testar é fácil:

[TestMethod]
public void GetWordsUppderTest()
{
    var palavras = Class1.GetWordsUpper("ola como vai?");
    Assert.AreEqual(3, palavras.Count());
    Assert.IsTrue(palavras.Contains("OLA"));
    Assert.IsTrue(palavras.Contains("COMO"));
    Assert.IsTrue(palavras.Contains("VAI?"));
}

Você pode levar isso longe, como obtenção de dados do banco, obtenção de input
do usuário, tudo somente quando precisar, e por aí vai.

E você, já usou o yield? Gosta? Onde? Comente aqui.