Estava pensando aqui sobre a plataforma .NET. E uma plataforma para todos, completa, extensa, robusta, com uma IDE incrivel (Visual Studio 2010), com versoes express, a maioria do que vou relacionar abaixo sao produtos free ou royalty-free, sendo que muitos sao OpenSource!Linguagens criadas para o .NET:C#BooF#Visual Basic.NETNemerleLinguagens portadas para .NET:Programar em Java? IKVMProgramar em Ruby ? IronRubyProgramar em Python? IronPythonProgramar p/ Android ? MonodroidProgramar p/ iOS ? MonotouchProgramar em delphi/pascal ? OxygeneProgramar em PHP ? Phalanger.netTipos de AplicativosDesenvolver para Web ? ASP.NETDesenvolver para desktop ? WPF, Windows FormsDesenvolver aplicacoes RIA? SilverlightDesenvolver para Cloud ? AzureDesenvolver WebServices? Windows Communication FoundationRodar tudo isso no Linux ? MonoExistem muitas outras tecnologias envolvendo a plataforma .NET, conforme eu va encontrando links interessantes vou alterando este post. Repository Pattern Utilizando o padrao repositorio,as telas e paginas da aplicacao que fazem acessos a banco de dados passam a acessarclasses intermediarias que atuam como repositorios de dados, tornando a aplicacaoindependente de um banco de dados real. Dessa forma, ha uma melhor separacao deresponsabilidades, onde as telas nao possuem logica de persistencia, que passaa ser de responsabilidade do repositorio. Isso facilita a troca de banco dedados (utilizar SQL Server, Oracle, MySQL, etc) e tambem os testes, uma vez quepodemos criar repositorios fake, trabalhando com listas em memoria, alem deseparar logica de persistencia da logica de interface com o usuario.Unit Of Work PatternRecentemente refatorei a minha versaode repositorio que utilizo em minhas aplicacoes para dar suporte ao padraoUnitOfWork. Utilizando esse padrao, os repositorios passam a compartilhar entresi um objeto que faz a coordenacao das transacoes dos repositorios a eleanexados em uma unica operacao Commit/Rollback. Ou seja, ao instanciar os repositoriospara uma determinada operacao, devo instanciar antes um objeto que implementaIUnitOfWork, e passa-lo na construcao desses repositorios. Ao chamar o metodo Commit()do UnitOfWork, todos os repositorios anexados serao persistidos.Como foi implementado o repositorio?Apos uma refatoracao completa, a interface do repositorio agora depende de uma interface IUnitOfWork:Com essa interface criada, podemos criar agora a interface IRepositorio:Uma classe de extensao para alguns metodos uteis aos repositorios que forem implementados:Uma implementacao basica da interface IRepositorio ficou da seguinte forma:Temos o repositorio, agora falta a implementacao da interface UnitOfWork. Para implementar esta interface, achei conveniente criar uma classe base:Precisamos da classe Container para nos auxiliar nas implementacoes de UnitOfWork:Em seguida todas as implementacoes para os diversos bancos de dados que desejarmos devem herdar desta classe base, implementando a interface.A seguir a implementacao padrao que utiliza Entity Framework CodeFirst, onde no construtor passa-se o DbContext. A seguir a implementacao padrao que utiliza Entity Framework tradicional, onde no construtor passa-se o ObjectContext. SolucaoDownload da solutionAbaixo segue o codigo demonstrando como utilizar o Entity Framework 4.1 Code First com 2 tabelas (Pessoas e Enderecos), com relacionamento Many-to-Many, e abstraindo o EFramework com o padrao repositorio da forma mais simples, sem injecao de dependencia.Mostre codigo! Classe PessoaClasse EnderecoClasse de Mapeamento e Configuracao do Entity FrameworkMetodo de teste Delegate e um tipo especial de classe no .NET que quando instanciado, armazena referencia a um metodo ou a uma lista de metodos, incluindo anonymous methods, desde que possuam assinatura compativel com sua