É melhor criar classes de Modelo ou ficar com o banco de dados genérico classe de utilitário?

StackOverflow https://stackoverflow.com/questions/2778

Pergunta

Temos um simples utilitário de classe in-house para o nosso banco de dados de chamadas (um leve wrapper em torno de ADO.NET), mas estou pensando em criar classes para cada banco de dados/objeto.Seria coisa inteligente a fazer isso, ou seria apenas o benefício se estivéssemos usando o framework MVC para ASP.NET?

Então, temos:

SQLWrapper.GetRecordset(connstr-alias, sql-statement, parameters);
SQLWrapper.GetDataset(connstr-alias, sql-statement, parameters);
SQLWrapper.Execute(connstr-alias, sql-statement, parameters);

Pensando em fazer isso:

Person p = Person.get(id);
p.fname = "jon";
p.lname = "smith";
p.Save();

ou para um novo registro

Person p = new Person();
p.fname = "Jon";
p.lname = "Smith";
p.Save();
p.Delete();

Seria esse ser inteligente, ou seria um exagero?Eu posso ver o benefício para reutilização, mudando de banco de dados, manutenção e/legibilidade.

Foi útil?

Solução

Esta questão é carregado, os dados driven design vs domain driven design.Para qualquer aplicação que tenha uma boa quantidade de comportamento, em seguida, domain driven design deve ser o preferido.Elaboração de relatórios, ou utilitário de aplicativos tendem a funcionar melhor (ou são mais rápidos para desenvolver) com data driven design.

O que você está perguntando é "a minha empresa devemos fazer uma mudança fundamental na forma como projetamos nosso código".Como um domínio-freak, meu intestino reação é gritar sim.No entanto, pela simples natureza de sua pergunta, eu não estou seguro que você totalmente entende o escopo da mudança que está propondo.Eu acho que você deveria falar mais de sua equipe sobre ele.

Obter alguns documentos, tais como Evan DDD livro, ou o livre fundações ebook, e , em seguida, você estará em melhor posição para julgar qual a direção que você deve ir.

Outras dicas

Não significa que é MVC o único padrão de design para a web, mas é útil.

Adotando apenas o 'M' vai pagar dividendos, na minha opinião, mesmo se você não quer adotar o 'V' ou 'C'.

A abordagem que você falar é considerada como uma boa por muitas pessoas, eu incluído!Aprendizagem esta abordagem vai exigir algum esforço, mas não deixe que colocá-lo fora!

Que sobre apenas tentando um projeto pequeno com o LINQ to SQL?Talvez encontrar um bom projeto de referência no código do google, e estudar a maneira como os outros trabalharam com ele.

É uma ferramenta simples, e permitem que você se familiarizar com alguns dos problemas que surgem com o mapeamento de objetos para bancos de dados.

Em seguida, você será capaz de começar uma sensação para ela, e decidir se vale a pena a curva de aprendizagem.

Haverá novos conceitos para entender e experimentar, coisas como:

  • Unidade de Trabalho:Quando você executar, Salvar e Excluir, etc, um ORM tende a não fazer isso imediatamente, ao passo que um conjunto de registos com base DAL vai.Isso pode ser surpreendente para você precisará aprender um pouco sobre isso.Leia sobre o Padrão de unidade de Trabalho para obter uma compreensão do presente.
  • Operações Em Massa são um problema OU/M.Um leitor de dados de maneira eficiente iterar através de milhares de linhas, mas com um ORM, você tem que ter cuidado ao trabalhar com grandes lotes de objetos.De novo, um para ler.
  • Associações parece ótimo quando podemos fazer coisas como customer.Orders.Count mas eles também são a causa de muitos problemas.Você precisa encontrar algumas práticas de segurança a seguir ao trabalhar com as associações.

...para citar alguns.

Para começar, não se preocupe sobre herança e material, basta começar pelo mais simples e de forma simples entidades que mapeiam para tabelas.

Tente usá-los da mesma forma que você gostaria de usar o existente DAL.Em seguida, começar a experimentar com as associações.

Então talvez tente colocar mais um comportamento em suas entidades.Se você começar a gostar deste, e sentir que você precisa de mais recursos, considere tentar um mais rico e ORM como Lightspeed ou O NHibernate.

Espero que isso ajude!

Para mim, parece que você está tentando fazer o que o LINQ já pode fazer por você.Se você está preso em um antigo quadro em que você não pode usar esse, eu poderia sugerir que você use Subconic (http://subsonicproject.com/) em vez de ter que criar manualmente todos estes modelo de objetos com a mão.

Eu tinha um projeto em que eu estava em uma situação semelhante e alterado para subsónico meio com resultados fantásticos.Mais rápido desenvolvimento e MUITO mais fácil de ler/use código.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top