terça-feira, outubro 31, 2006

Data Access Objects com DB4O : Continuando

Primeiro gostaria de destacar o post de sri_canesh , pois quando nos deparamos com db4o e percebemos a sua importancia, queremos logo usá-lo em todo lugar, e esquecermos para sempre dos bancos relacionais, quando na verdade, não 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 domínio:


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 obrigatórios são "não 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 código fonte, incluindo o arquivo de solução monodevelop (.mds) e a dll do db4o 5.5 para mono, pode ser baixado aqui: Clique aqui

ps: A versão do monodevelop testada foi 0.12, usando gmcs

Dúvidas, sugestões e críticas, comentem...

[]'s
Eduardo Rocha Monteiro

9 comentários:

Anônimo disse...

Cara, Muito bom, eu tava justamente procurando isso. Só tem uma observação: o arquivo do db4o referenciado ta referenciando pro lugar errado, daí tive que ajustar.

falou!

Unknown disse...

Felipe, vou verificar e consertar esta noite. Obrigado pelo toque
[]'s

Bernard Correa Pereira disse...

Lembrete: Use a versão 2.0 do MONO , A 1,1 vai dá erro por causa do uso do template na linha:

public abstract class DAO< T > where T: new()

e Boaq Sorte !!!

Unknown disse...

Isso deve funcionar também:
Db4o.configure().objectClass("MinhaClasse.class").cascadeOnDelete(true);
Db4o.configure().objectClass("MinhaClasse.class").cascadeOnUpdate(true);

:D

Unknown disse...

Carlan Calazans, mas isso não tem muito a ver com o que foi postado...

[]'s

Anônimo disse...

hi every person,

I identified db4obrasil.blogspot.com after previous months and I'm very excited much to commence participating. I are basically lurking for the last month but figured I would be joining and sign up.

I am from Spain so please forgave my speaking english[url=http://learnnewthingsck.info/].[/url][url=http://behindthescenessh.info/bookmarks].[/url][url=http://pamotivationalquotes.info/forum].[/url]

Anônimo disse...

Hello TO all www.blogger.com members,
I just wanted to introduce myself to all of you and say that I am extremely happy to be a new member here[url=http://worlddiscoveryck.info/].[/url] I have been enjoying the conversations here for some time and look forward to participating now[url=http://acbehindthescenes.info/].[/url][url=http://sportsnewsal.info/forum].[/url]

Glad to be a part of the community[url=http://latestnewsci.info/].[/url][url=http://vibehindthescenes.info/].[/url]

Anônimo disse...

the valuable ideas you presented do help our team's investigation for my company, appreaciate that.

- Lucas

Anônimo disse...

It is my first message here, so I would like to say hallo to all of you! It is really diversion to join your community!