segunda-feira, 2 de novembro de 2009

Leituras Obrigatórias e Recomendações

           Geralmente após uma época de “caça talentos”, nas empresas onde trabalho, sinto uma necessidade (digna de um carpinteiro do universo) de divulgar ou indicar uma lista de livros que considero obrigatória ou importante aos candidatos as vagas.

Então seguem alguns por área (A lista é grande… mas toda caminhada começa com o primeiro passo!):

Developers

1.Code Complete (Obrigatório)

Jacket[1]

2. The Pragmatic Programmer: From Journeyman to Master

41hImUq3RKL._BO2,204,203,200_PIsitb-sticker-arrow-click,TopRight,35,-76_AA240_SH20_OU01_[1]

.Net

1.MCTS Self-Paced Training Kit - Exam 70-536_Second Edition

51jAKc-IaHL._SS500_[1]

2.Pro C# 2008 and the .NET 3.5 Platform, Fourth Edition

51eRdH6OhKL._SL160_PIsitb-sticker-arrow-dp,TopRight,12,-18_SH30_OU01_AA115_[1]

3.MCTS Self-Paced Training Kit (Exam 70-562): Microsoft .NET Framework 3.5—ASP.NET Application Development

9780735625624f_2[1]

3. WCF – Programando Serviços

imagem[1]

4.Pro linq object relational mapping in c#

51niziOkmxL._SL160_AA115_[1]

Análise e Orientação a Objetos, UML, Desenvolvimento de Software

1. UML Distilled: A Brief Guide to the Standard Object Modeling Language (3rd Edition)

51N90Q8iwnL._SL160_AA115_[1]

2. Applying UML and Patterns (3Ed)

513SHPAY7PL._SL160_AA115_[1]

3.Design Patterns: Elements of Reusable Object-Oriented Software

51Rs5KgdLTL._BO2,204,203,200_PIsitb-sticker-arrow-click,TopRight,35,-76_AA240_SH20_OU01_[1]

4.Growing Object-Oriented Software, Guided by Tests (Oct 2009) {Na fila!}

51fQ0%2B5W%2BkL._SL160_PIsitb-sticker-arrow-dp,TopRight,12,-18_SH30_OU01_AA160_[1]

DDD

1.Domain Deriven Design – Atacando as complexidades no coração {Obrigatório}

21576488[1]

2. Applying Domain Driven Design and Patterns With Examples in C# and.NET {Na fila}

51sbuQIxz9L._BO2,204,203,200_PIsitb-sticker-arrow-click,TopRight,35,-76_AA240_SH20_OU01_[1]

Arquitetura e Padrões de Projeto

1.Padrões de Arquitetura de Aplicações Corporativas (Obrigatório pra qualquer arquiteto)

1348031[1]

2. Use a cabeça – Padrões de projeto (Excelente e obrigatório)

21294018[1]

3.Analysis Patterns: Reusable Object Models

51BSMJWXV2L._BO2,204,203,200_PIsitb-sticker-arrow-click,TopRight,35,-76_AA240_SH20_OU01_[1]

Refatoração

1.Refactoring: Improving the Design of Existing Code (Obrigatório)

images[1]

2.Refactoring to Patterns {Na fila!}

516pPX8YmvL._SL500_AA240_[1]

TDD e Testes

1. Test Driven Development: By Example

513PZWJDH7L._BO2,204,203,200_PIsitb-sticker-arrow-click,TopRight,35,-76_AA240_SH20_OU01_[1]

2. The Art of Unit Testing: with Examples in .NET {Em andamento.. muito bom}

51FXRestkbL._SL500_AA240_[1]

3.How We Test Software at Microsoft (Muito bom!)

41F7IuHTj3L._SL160_PIsitb-sticker-arrow-dp,TopRight,12,-18_SH30_OU01_AA115_[1] 

Esta lista será constantemente atualizada (até pq devo ter esquecido alguns).

Quaisquer comentários são bem vindos, assim como recomendação de algum livro. Caso queiram trocar idéias sobre algum livro e seu conteúdo, será um prazer.

Lobo Junior
(Atualizada em 03/11/2009)

quinta-feira, 27 de agosto de 2009

Vídeo da MS sobre "The Future"

Este vídeo foi exibido no Teched 2009 mas já existia na web, para quem nunca viu, vale a pena viajar um pouco..



Preparados para aplicações Touchscreen?? Ainda não ?? :-P

sexta-feira, 17 de julho de 2009

Serviços WCF e WCFTestClient

Tenho visto muita gente criando serviços (*.svc) no WCF e lamentando não poder testá-los sem ter que construir um cliente apenas para isso.

Entretanto, o que muita gente não sabe é que o WCF possui uma ferramenta utilitária para testes (testes de integração não) dos serviços criados.

Como usar?

  1. Execute o prompt de linha de comando: Iniciar>>Microsoft Visual Studio 2008>>Visual Studio Tools>>Visual Studio 2008 command prompt.
  2. Após aberto o command prompt, digite: “WcfTestClient” seguido de enter.
  3. Pronto. Deverá abrir um aplicativo como mostrado na imagem abaixo:
  4. Para testar seu serviço. Click em File>>Add service
  5. Informe a Url do serviço e seja feliz!

“Até a Carla Perez é capaz de testar serviços WCF”.

WcfTestClient

Lobo Jr
17/07/2009

terça-feira, 14 de julho de 2009

Windows Azure – Boleto MS!?!

Por IDG News Service/EUA

Sistema em nuvem da Microsoft, que será lançado em novembro, terá cobrança por consumo, assinatura ou volume de dados em transações.

Eu estava curioso para ver como isso seria.

terça-feira, 16 de junho de 2009

Eu já falei eu quero ser “Ágil”

Recomendo esse post da InfoQ com entrevista com James Shore, assim como seu livro “A arte do desenvolvimento ágil

InfoQ conversou com James sobre sua percepção de que a adoção de métodos ágeis estã crescendo de forma errada… , não percam o post !

[Trecho]

As pessoas estão dizendo, "Queremos ser ágeis", e então buscam a forma mais barata e rápida, e como resultado, esta transformação não estão tornando a vida delas nada fácil. Em muitos casos, estão tornando a vida pior.
...
O que eu vejo é que a palavra ágil se tornou um jargão, e agora "ser ágil", tornou-se o objetivo. Porém, se "ser ágil" é o objetivo, você pode simplesmente fazer qualquer coisa, por mais anormal que seja, colocar a palavra "ágil" e declarar sucesso, mas sem realmente ter feito nada que melhorasse a forma de trabalho.

O objetivo do movimento ágil não é "se tornar ágil", mas sim produzir sistemas que tenham valor e que façam o que se propõem de maneira eficaz, flexível e humana.

segunda-feira, 1 de junho de 2009

Controle de concorrência com Linq to Sql

Este artigo discutirá como o Linq to Sql suporta o tratamento a concorrência otimista.

Suporte do Linq to Sql
O L2S e o DataContext foi feito para suportar o controle de concorrência otimista, assim as alterações só são bem sucedidas se o estado do DB não mudou desde que recuperados os dados inicialmente.

Antes de nos aprofundarmos em L2SQL vamos aos conceitos de concorrência pessimista e otimista.

Concorrência Pessimista
Este tipo de tratamento de concorrência bloqueava os registros no Banco de Dados enquanto as alterações eram realizadas, evitando que outros usuários fizessem alterações ao mesmo tempo.

Este tipo de solução era bastante comum em sistemas “Windows Applications” pequenos. O que é inviável para sistemas com uma grande escala de usuários, ou “disconnected environment” como objetos guardados numa sessão Asp.Net.

Concorrência Otimista
Este modelo, permite que qualquer usuário faça alterações nas suas cópias de dados. Entretanto, quando estes valores forem salvos, primeiro deverá ser verificado se os valores modificados possuem como valores antigos os mesmos presentes no Banco de Dados. Se houver um conflito, o sistema deverá saber como se comportar.

Para melhor compreensão, este código Sql mostra como esta comparação é feita e como o conflito é identificado:

UPDATE dbo.Book
SET Title = @NewTitle,
Subject = @NewSubject,
Publisher = @NewPublisher,
PubDate = @NewPubDate,
Price = @NewPrice,
PageCount = @NewPageCount,
Isbn = @NewIsbn,
WHERE ID = @ID AND Title = @OldTitle AND
Subject = @OldSubject AND
Publisher = @OldPublisher AND
PubDate = @PubDate AND
Price = @Price AND
PageCount = @PageCount AND
Isbn = @OldIsbn AND
RETURN @@RowCount

Os objectos em memória guardam o valor original (o valor obtido da base de dados) e o valor actual (novo valor atribuído pelo utilizador). Como já terá percebido, um conflito ocorre quando o valor original do objecto não corresponde ao valor presente na base de dados, ou seja, na cláusula where vai um parâmetro onde o seu valor não corresponde ao valor presente na base de dados.

Solução para Optimistic concurrency
Lembrando apenas que para uma “Optimistic concurrency” temos 3 formas de resolver e elas serão abordadas usando Linq to Sql:

  1. Retém as alterações feitas inicialmente (Já persistidas no BD);
  2. Conserva a ultima alteração;
  3. Faz um merge dos valores;

Suporte Linq to Sql a solução para Optimistic concurrency
Precisamos antes de mais nada saber quais são os conflitos e informar ao Linq to Sql (DataContext) como resolver.

O DataContext nos permite descobrir não somente os objetos que estão em conflito, como as propriedades que são diferentes entre o valor original, o valor alterado, e
o valor atual do banco de dados.

  • UpdateCheck: Essa propriedade utilizada no mapeamento das entidades Linq para as colunas do DB, diz ao L2Sql como o mesmo utilizará esta coluna no procesamento da concorrência otimista (opções: Always (default), Never, WhenChanged).
    Esta propriedade determina a geração daquele Sql descrito lá em cima, portanto use com moderação para não degradar a performance (Considere outras formas como uso de RowVersion ou TimeStamp);
  • ConflictMode: Pode ser usado junto com o SubmitChanges. Permite-nos dizer como os conflitos deverão ser notificados quando detectado;
    • ContinueOnConflict: As alterações possíveis são realizadas e os conflitos são colocados numa collection e retornados ao fim do processo;
    • FailOnFirstConflict: Atualizações param imediatamente após a primeira ocorrência de conflito;

Db.SubmitChanges(ConflictMode.ContinueOnConflict);

  • RefreshMode: Permite-nos definir como o aplicativo deverá se comportar (tratar) ao encontrar um conflito (Optimistic concurrency). Manter valores originais, valores atuais do BD ou novos valores.
    • KeepChanges: Mantém os correntes valores que foram alterados, mas atualiza os outros valores com os correntes no banco de dados (Foco nas alterações e na ordem de ultima alteração é persistida);
    • KeepCurrentValues: Troca os valores originais pelos obtidos da base de dados. Valores atuais não são modificados;
    • OverWriteCurrentValues: Sobrescreve suas alterações com os valores presentes no banco de dados;

Até a próxima!!!

domingo, 17 de maio de 2009

Persistence Ignorance and POCO in Entity Framework 4.0

A MS está reagindo bem as críticas feitas pela comunidade. A crítica mais forte foi sobre “persistence ignorance”. E o ADO.Net Team promete uma novo Release Candidate, com várias mudanças, “Persistence Ignorance” é uma delas.

Assim uma entidade para ser persistida pelo Entity framework, não precisa herdar de uma classe específica, ou implementar interface específica. Enfim, teremos um modelo de domínio limpo, sem misturar tecnologia de persistencia com as entidades.

Acompanhem diretamente do Blog do ADO.NET Team.