Ola, meu nome e Cassio e esse e o meu primeiro post nesse blog.Durante algum tempo fui o representante oficial do db4o aqui no Brasil. Tendo em vista projetos pessoais que assumi, acabei declinando do cargo, mas continuo adorando e recomendando o db4o.Para comecar gostaria de fazer um comentario sobre uma duvida que e frequente que e encaminhada por email para mim.Muitos querem saber se pode colocar o db4o no lugar de banco relacional x,y o z. Minha resposta e:"na maioria das vezes, nao"! O objetivo do db4o e ser o repositorio de objetos em situacoes onde o banco de dados deve ficar o mais oculto possivel (nao requisitar um dba), em aplicacoes embutidas, em aplicacoes standalone ou como complemento de um banco relacional.Nao pense em usar o db4o como substituto do banco relacional que voce esta acostumado a usar em seu ERP, CRM ou sistema de supply chain. Nessa situacao ainda e melhor voce manter o banco "jurassional" e para conversar com ele utilize algum framework OR/M como o NHibernate(sou c-sharpeiro, por isso recomendo o hibernate com N maiusculo !). Utilize o db4o nas pontas, como por exemplo aplicacoes que ficarao em um pda, ou ainda aplicacoes offline(como por exemplo, sistemas que ficam em notebooks de vendedores e no final do dia sao sincronizados com o banco principal). Utilize-o ainda na linha de producao para ser o banco de dados de sistemas que controlam dispositivos.Saber utilizar e indicar a ferramenta certa para cada situacao e o que diferencia o verdadeiro profissional. Nao podemos nos mover pela paixao por alguma coisa, por mais espetacular que ela seja (como o db4o) e por em risco todo um sistema critico para uma empresa.Abracos e contem comigo!Cassio Rogerio Eskelsen Primeiro gostaria de destacar o post de sri_canesh , pois quando nos deparamos com db4o e percebemos a sua importancia, queremos logo usa-lo em todo lugar, e esquecermos para sempre dos bancos relacionais, quando na verdade, nao devemos fazer isso.Agora continuando o post sobre o "pattern" Data Access Objects com db4o, vamos ver como ficaria uma subclasse DAO (alguns chamam de classe sombra).Primeiro, vamos criar uma classe exemplo da camada de dominio:namespace Db4oBrasil.Dominio{ public class Usuario { private string _nome; private string _email; private string _senha; // ... getters e setters (Properties) public override string ToString() { return _nome + " " + _email; } }}Agora, a classe UsuarioDAO, responsavel pela persistencia de objetos do tipo Usuario.using System.Collections.Generic;using com.db4o;using Db4oBrasil.Dominio;namespace Db4oBrasil.DAO{ public class UsuarioDAO : DAO<Usuario> { // Checa se todos os campos obrigatorios sao "nao nulos" protected override bool ChecarRestricaoCamposNaoNulos(Usuario usr) { if(usr.Nome==null || usr.Email==null || usr.Senha==null) return false; else return true; } // Checa se o Usuario usr, se inserido no bd, violaria a restricao de // chave primaria, no caso, o atributo email protected override bool ChecarRestricaoChavePrimaria(Usuario usr) { ObjectContainer db = Db4o.OpenFile(YAPFILE); try { Usuario proto = new Usuario(); proto.Email = usr.Email; ObjectSet result = db.Get(proto); if (result.Count==0) return true; return false; } finally { db.Close(); } }}O codigo fonte, incluindo o arquivo de solucao monodevelop (.mds) e a dll do db4o