none
Acesso a Dados na Web (software pequeno/medio porte) RRS feed

  • Pergunta

  • Fala ai Pessoal, tudo bem ? Sou novo aqui no forum de Arquitetura.

    Tenho uma dúvida meio simples mas gostaria de saber a opnião de vocês que tem um conhecimento mais amplo sobre Arquitetura.
    Hoje desenvolvo softwares (que varia de 10 a 50 entidades no máximo conforme a necessidade) em asp.net (C# ou Vb.net) com mysql. Para acessar os dados utilizamos aqui no trabalho uma classe que desenvolvemos que encapsula ado.net internamente e faz todo o trabalho do acesso/transações/comandos/parametros/etc... Funciona legal, mas cansa um pouco nossa manutenção.

    Gostaria de evoluir esta forma, para o nosso tipo de aplicação (pequeno/medio porte). Já pesquisei e utilizei o SubSonic e achei bem legal, um excelente gerador de código e funciona muito bem, mas não consegui fazer algumas coisas que faço com minha pobre classe base.
    Vejo muitas pessoas falando de NHibernate, mas desconheço para falar e não sei se é o ideal para o porte da aplicação. Derrepente utilizar NHibernate com alguma outra ferramenta seja legal, qual ???

    Este modelo, é interessante: http://imar.spaanjaars.com/QuickDocId.aspx?quickdoc=476 ???

    Gostaria de saber opniões e o que vocês utilizam em projetos pequenos que tendem a crescer na parte de acesso a dados... sei que é um assunto complexo e com muitas váriaveis, enfim...

    Obrigado pessoal
    um abraço e agradeço desde já a possível ajuda!


    Felipe Oriani
    sexta-feira, 29 de maio de 2009 19:20

Respostas

  • Felipe,

    O repositório age como uma coleção de objetos em memória. O uso seria algo assim:

    var rep = new RepositorioCliente();
    var cliente = rep.Obter(1);
    cliente.Nome += "novo";
    rep.Salvar(cliente);

    Atenção: O repositório não é um DAL. Ele utiliza um DAL ou implementa algum código de acesso a dados, mas não é um DAL. As preocupações dele são fingir que é uma coleção em memória.

    No vídeo que apresentei DDD no .Net Architects eu falei sobre repositórios. Talvez interesse:
    http://video.google.com/videoplay?docid=-7056786168177403020&hl=en
    Giovanni Bassi, Microsoft MVP, MCSD, MCPD, CSM, Arquiteto de software - http://www.giovannibassi.com
    • Marcado como Resposta Felipe B Oriani terça-feira, 2 de junho de 2009 11:55
    terça-feira, 2 de junho de 2009 04:14
    Moderador

Todas as Respostas

  • Oi Felipe,

    Com relação ao exemplo do site que você passou:
    Eu não gosto desse modelo. Alguns problemas:
    1. Código repetido, matando o DRY: BLL e DAL tem métodos repetidos, e muitas vezes (quase todas) tudo o que a BLL faz é redirecionar à DAL.
    2. Classes "Manager" são estáticas. Impossível testar unitariamente, tanto do ponto de vista do seu consumidor, quanto testar as classes em si.
    3. Modelo anêmico: o comportamento está nas "Managers", ou seja, não é um modelo OO, que integra dados e comportamento.
    Há outros problemas. Esses são os maiores.
    Esse modelo vai gerar sistemas difíceis de manter.

    Quanto à ORMs, como o NHibernate, LINQ to SQL, ou Entity Framework: eles sempre vão impactar a performance. Você vai ter que avaliar no seu contexto se vale a pena, com testes de stress, ou buscando dados de performance de terceiros. Eu não usaria dados de terceiros, seu cenário sempre vai ser diferente. Faça uma PoC (prova de conceito).
    Você ainda pode usar o NH com Castle ActiveRecord. É bem interessante, e super produtivo.
    Subsonic també é interessante, mas tem algumas limitações. Vai atender na maior parte dos casos simples. O que você não conseguiu fazer com ele?

    Sugestão? Se o modelo for complexo: Domain Driven Design. Se não for, avalie uma solução mais simples. De qualquer forma, eu avaliaria dois modelos de acesso a dados: ActiveRecord e padrão repositório.

    Giovanni Bassi, Microsoft MVP, MCSD, MCPD, CSM, Arquiteto de software - http://www.giovannibassi.com
    segunda-feira, 1 de junho de 2009 17:19
    Moderador
  • Fala Giovanni,

    Legal cara, vou pesquisar mais sobre Castle AR e NHibernate e tentar fazer algo simples para sentir como é o desenvolvimento.

    Quanto as limitações do SubSonic, não sei se poderia chamar de limitação ou features para a versão 3; não consegui compilar o código gerado em um projeto Classe Library inicialmente, ao gerar o código ele dava alguns problemas de referência, e pesquisando encontrei a solução; outro problema foi herança, por exemplo, um cenário no banco de dados onde eu tenha, a tabela Pessoa e abaixo desta Fornecedor, Vendedor, Cliente com relações 1x1 (uma herança), o código gerado não faz herança no mapeamento. Mas de maneira geral, gostei muito do framework, achei funcional simples e prático. A versão que utilize era a 2.0.3 junto com Mysql. Vi que na próxima versão (3 que está em beta ainda) já teremos suporte a Linq, mas ainda não cheguei a testar o beta.

    Giovanni, você poderia me dar um exemplo prático do padrão repositório ?

    Obrigado pela atenção



    Felipe Oriani
    segunda-feira, 1 de junho de 2009 19:12
  • Felipe,

    O repositório age como uma coleção de objetos em memória. O uso seria algo assim:

    var rep = new RepositorioCliente();
    var cliente = rep.Obter(1);
    cliente.Nome += "novo";
    rep.Salvar(cliente);

    Atenção: O repositório não é um DAL. Ele utiliza um DAL ou implementa algum código de acesso a dados, mas não é um DAL. As preocupações dele são fingir que é uma coleção em memória.

    No vídeo que apresentei DDD no .Net Architects eu falei sobre repositórios. Talvez interesse:
    http://video.google.com/videoplay?docid=-7056786168177403020&hl=en
    Giovanni Bassi, Microsoft MVP, MCSD, MCPD, CSM, Arquiteto de software - http://www.giovannibassi.com
    • Marcado como Resposta Felipe B Oriani terça-feira, 2 de junho de 2009 11:55
    terça-feira, 2 de junho de 2009 04:14
    Moderador
  • Fala ai Giovanni,

    Valeu pelas respostas, eu cheguei a ver uma parte do vídeo sobre DDD, mas não terminei ainda, preciso ver ele inteiro.

    Vou pesquisar sobre o NH e Castle AR e Repositorio.

    Obrigado
    um abraço

    Att,
    Felipe Oriani
    terça-feira, 2 de junho de 2009 11:55