none
Indignado Acesso a Banco, Postgres, SQLServer e Dataset RRS feed

  • Pergunta

  • Quando faco uma aplicação desktop simples em .net, geralmente vb.net eu uso SQLServerExpress e pra acessar os dados eu uso a criacao de dataset na ferramenta visual, crio as queryes no tableadapter e geralmente isso leva alguns segundos até mesmo pra tabelas com muitas colunas. Acho simples rapido e facil, funciona 100%.

    O problema é que atualmente estou trabalhando em um projeto grande, e o banco é Postgres, entao para usar dataset de forma visual nao esta sendo viavel, varias incompatibilidades de comando entre SQL e Postgres, as SP nao aparecem no server explorer  e oturos problemas.

    O projeto esta desenvolvido em varias camadas, acho que o nome pra isso é MVC, sei la, nao tenho muita certeza, mas analisando essas coisas eu acho muito estranho alguem achar isso a melhor manera de se fazer, ex: tem uma tabela com 3 colunas, crio uma camada que vai acessar co banco diretamente, crio funcoes de insert update delet select, crio parametros, defino os tipos de variaveis, tamanho delas, etc., depois vo pra outra camada e faco mais infinitas coisas, e assim por diante.

     

    Eu queria saber em que mundo isso é mais simples, mais facil, mais facil de dar manutencao do que eu simplesmente escrever os selects e inserts nao mao logo em uma camada so?

    Outra coisa, alguem sabe como eu posso usar o postgres como eu usava o sql server, arrastando as tabelas pro dataset, criando os tabeladapter e etc.?

    Alguem sabe dizer porque usar tanta camada, fazer tanto codigo pra acessar uma simples tabela de 3 colunas? onde isso é mais simples? onde isso é facil de manter?

    Nao é possivel que eu esteja tao equivocado, que eu seja o unico que acha isso tao trabalhoso.

    quinta-feira, 20 de outubro de 2011 12:28

Respostas

  • Olá Alberto,

     

    Respondendo sua pergunta sobre utilizar o PostGres com o Visual Studio, segue este link: http://stackoverflow.com/questions/867879/postgresql-data-connection-server-explorer-in-visual-studio-2008

    Nesse link o autor falar de dois plug-ins chamados de Npgsq e PsqlOdbc que adicionam algumas features ao Server Explorer. Talvez isso seja suficiente, não cheguei a testa-los =]

     

    Com relação a programação em camadas,

    Muitos projetos acabam adotando o uso de camadas de modo errado, o que apenas faz com que as aplicações realmente fiquem mais trabalhosas.
    Existem muitas empresas que acreditam que quanto mais camadas melhor, mas isso é errado, pois isso torna o código mais complexo e fica parecendo o metro da linha amarela de São Paulo, que pra chegar no ponto que interessa vc tem que ficar descendo, descendo, descendo, descendo...

    Aplicações em camadas são realmente fantásticas se utilizadas do modo correto e agregam muitos benefícios, alguns deles:
    - Sua aplicação se torna desacoplável: vc pode remover peças e substituir por outras conforme a sua necessidade. Caso vc precise mudar seu banco de dados de SQL para Oracle isso é muito mais fácil.
    - Aumento da reusabilidade: Ao trabalhar com camadas existe um aumento da reusabilidade do seu código, pois um bloco encapsulado de uma regra de acesso a dados pode ser reutilizada em N pontos pelas camadas de controle de sua aplicação.
    - Especialização das classes: quando trabalhamos com camadas acabamos tornando nossas classes especialistas naquilo que fazem, por exemplo: uma classe de repositório é especialista em registrar dados, uma classe de controle é especialista em filtrar informações e validar dados, e uma classe de modelo apenas representa os dados...

    Sou grande fã e entusiasta de design patterns e programação em camadas... então posso passar a madrugada falando aqui :)

    Mas vou lhe demonstrar um cenário simples de gosto de trabalhar:

    O cenário ideal de trabalho para mim é uma mistura de MVC (Model View and Controller) com DAO (Data Access Object).

    Primeiro teremos nossa classe Model, que apensar representará a estrutura de nossa entidade, desta forma:

    public class Cliente
    {
    public string Nome {get;set;}
    public int Idade {get;set;}
    }
    


    Depois, criaremos nossa classe DAO, que será responsável por armazenar os dados (seja em um banco de dados relacional, banco de dados orientado a objetos, um arquivo XML, ou na Nuvem, ou em qualquer canto)

    Essa classe ficará assim:

    public class ClienteRepositorio
    {
    public static void Salvar(Cliente cliente)
    {
    // Código para registrar o cliente na fonte de dados
    }
    
    // Aqui deverão ser inclusos outros métodos de persistência, como os métodos de exclusão, recuperação e atualização.
    
    }

    Depois, vc terá de criar uma classe de controle, essa classe ficará responsável por receber comandos da interface do sistema, aplicar regras e se comunidar com a classe de acesso a dados... Sua classe de controle deve ficar assim:

    public class ClienteControle
    {
    public void Salvar(Cliente cliente)
    {
    if (cliente.Idade < 18)
    throw new InvalidOperationException("Idade inválida");
    if (string.IsNullOrEmpty(cliente.Nome))
    throw new InvalidOperationException("Nome em branco");
    
    ClienteRepositorio.Salvar(cliente);
    
    }
    }

    Note que não misturamos as regras de validação dos dados, com o código de inclusão de dados na fonte de dados... Isso torna nosso código mais inteligível e limpo.

     

    Na camada de control, sua unica preocupação será chamar o método ClienteControle.Salvar(Cliente).

     

    Outra vantagem do uso de camadas, com diferentes assemblies, é que se for necessário pegar parte da regra de seu sistema web, e passá-lo para um sistema Windows Forms, Silverlight, ou Mobile, isso será muito simples, pois sua aplicação está toda desacoplada e o reúso será satisfatório.

     

    Gostaria de deixar meu contato:

    Msn: ferhenriquef@live.com
    E meu e-mail: ferhenriquef@live.com

    Se quiser conversar sobre isso, estarei a disposição.

    Se quiser ler sobre acesso a dados, design patterns e outros temas relacionados, acesse meu blog: http://ferhenriquef.wordpress.com/

     

    Estou a disposição! =]

    []s!


    Fernando Henrique Inocêncio Borba Ferreira
    while(alive){ this.WriteCode(); }
    Blog: http://ferhenriquef.wordpress.com/
    Twitter: @ferhenrique
    sexta-feira, 21 de outubro de 2011 03:27
    Moderador

Todas as Respostas

  • Prezado(a),
    Estou migrando seu post para o fórum de Acesso a Dados.
    Por favor, das próximas vezes que tiver alguma dúvida relacionada a esse assunto, poste por lá.
    Obrigado.

    André Alves de Lima
    Microsoft MVP - Client App Dev
    Visite o meu site: http://www.andrealveslima.com.br
    Me siga no Twitter: @andrealveslima
    quinta-feira, 20 de outubro de 2011 17:15
    Moderador
  • Olá Alberto,

     

    Respondendo sua pergunta sobre utilizar o PostGres com o Visual Studio, segue este link: http://stackoverflow.com/questions/867879/postgresql-data-connection-server-explorer-in-visual-studio-2008

    Nesse link o autor falar de dois plug-ins chamados de Npgsq e PsqlOdbc que adicionam algumas features ao Server Explorer. Talvez isso seja suficiente, não cheguei a testa-los =]

     

    Com relação a programação em camadas,

    Muitos projetos acabam adotando o uso de camadas de modo errado, o que apenas faz com que as aplicações realmente fiquem mais trabalhosas.
    Existem muitas empresas que acreditam que quanto mais camadas melhor, mas isso é errado, pois isso torna o código mais complexo e fica parecendo o metro da linha amarela de São Paulo, que pra chegar no ponto que interessa vc tem que ficar descendo, descendo, descendo, descendo...

    Aplicações em camadas são realmente fantásticas se utilizadas do modo correto e agregam muitos benefícios, alguns deles:
    - Sua aplicação se torna desacoplável: vc pode remover peças e substituir por outras conforme a sua necessidade. Caso vc precise mudar seu banco de dados de SQL para Oracle isso é muito mais fácil.
    - Aumento da reusabilidade: Ao trabalhar com camadas existe um aumento da reusabilidade do seu código, pois um bloco encapsulado de uma regra de acesso a dados pode ser reutilizada em N pontos pelas camadas de controle de sua aplicação.
    - Especialização das classes: quando trabalhamos com camadas acabamos tornando nossas classes especialistas naquilo que fazem, por exemplo: uma classe de repositório é especialista em registrar dados, uma classe de controle é especialista em filtrar informações e validar dados, e uma classe de modelo apenas representa os dados...

    Sou grande fã e entusiasta de design patterns e programação em camadas... então posso passar a madrugada falando aqui :)

    Mas vou lhe demonstrar um cenário simples de gosto de trabalhar:

    O cenário ideal de trabalho para mim é uma mistura de MVC (Model View and Controller) com DAO (Data Access Object).

    Primeiro teremos nossa classe Model, que apensar representará a estrutura de nossa entidade, desta forma:

    public class Cliente
    {
    public string Nome {get;set;}
    public int Idade {get;set;}
    }
    


    Depois, criaremos nossa classe DAO, que será responsável por armazenar os dados (seja em um banco de dados relacional, banco de dados orientado a objetos, um arquivo XML, ou na Nuvem, ou em qualquer canto)

    Essa classe ficará assim:

    public class ClienteRepositorio
    {
    public static void Salvar(Cliente cliente)
    {
    // Código para registrar o cliente na fonte de dados
    }
    
    // Aqui deverão ser inclusos outros métodos de persistência, como os métodos de exclusão, recuperação e atualização.
    
    }

    Depois, vc terá de criar uma classe de controle, essa classe ficará responsável por receber comandos da interface do sistema, aplicar regras e se comunidar com a classe de acesso a dados... Sua classe de controle deve ficar assim:

    public class ClienteControle
    {
    public void Salvar(Cliente cliente)
    {
    if (cliente.Idade < 18)
    throw new InvalidOperationException("Idade inválida");
    if (string.IsNullOrEmpty(cliente.Nome))
    throw new InvalidOperationException("Nome em branco");
    
    ClienteRepositorio.Salvar(cliente);
    
    }
    }

    Note que não misturamos as regras de validação dos dados, com o código de inclusão de dados na fonte de dados... Isso torna nosso código mais inteligível e limpo.

     

    Na camada de control, sua unica preocupação será chamar o método ClienteControle.Salvar(Cliente).

     

    Outra vantagem do uso de camadas, com diferentes assemblies, é que se for necessário pegar parte da regra de seu sistema web, e passá-lo para um sistema Windows Forms, Silverlight, ou Mobile, isso será muito simples, pois sua aplicação está toda desacoplada e o reúso será satisfatório.

     

    Gostaria de deixar meu contato:

    Msn: ferhenriquef@live.com
    E meu e-mail: ferhenriquef@live.com

    Se quiser conversar sobre isso, estarei a disposição.

    Se quiser ler sobre acesso a dados, design patterns e outros temas relacionados, acesse meu blog: http://ferhenriquef.wordpress.com/

     

    Estou a disposição! =]

    []s!


    Fernando Henrique Inocêncio Borba Ferreira
    while(alive){ this.WriteCode(); }
    Blog: http://ferhenriquef.wordpress.com/
    Twitter: @ferhenrique
    sexta-feira, 21 de outubro de 2011 03:27
    Moderador