Pergunta

Eu tenho um monte de aulas para os dados de acesso em um dos meus projetos, mas essas classes estão se tornando extremamente volumoso por causa do código que recupera os dados dos leitores de dados.

Meu código geralmente fica assim:

// Execute the data reader
using (DbDataReader reader = command.ExecuteReader())
{
  while (reader.Read())
  {
     obj = this.FillDataReader(reader);
     objlist.Add(obj);
  }
}

internal SomeObject FillDataReader(IDataReader dr)
{
   SomeObject obj = new SomeObject ();


   if (!dr.IsDBNull(dr.GetOrdinal("objectID")))
   {
     obj.ID = dr.GetInt32(dr.GetOrdinal("objectID"));
   }

   return obj;
}

Alguns dos métodos de preenchimento facilmente atingir mais de 400 linhas, por isso há uma maneira decente para separá-los fora? Seria classes parciais são aceitáveis? Em um mundo ideal, eu estaria usando um ORM, mas infelizmente eu não posso pagar o tempo para aprender a usar um.

Foi útil?

Solução

Certamente você poderia usar classes parciais para dividir fora o código para os métodos de preenchimento. Você poderia até mesmo olhar usando um sistema modelo para gerar esses arquivos de classe parcial.

Dito isto, um ORM é uma solução mais simples e realmente não levar tanto tempo para descobrir se suas necessidades são simples.

Para necessidades básicas, onde você não precisa fina LINQ controle para SQL funciona um tratamento, e ao contrário do que muitos pensavam que ele está sendo atualizado como parte do VS 2010 / .NET 4.

Outra opção é Entity Framework, também está sendo atualizado como parte do VS 2010 / .NET 4. Dá-lhe muito mais controle, mas também pode exigir um pouco mais de aprendizagem.

Quanto tempo você leva para criar estes 400 + linha longo Preencha métodos? Tem certeza de que não poderia usar esse tempo para aprender um ORM? Nenhum programador deve se sentir obrigado a constantemente write código do bolinho-cortador (por exemplo métodos ADO.NET preenchimento), ele pode rapidamente levar a alegria de programação!

Outras dicas

As classes parciais ajuda a separar o seu código, mas os arquivos terá que estar no mesmo projeto. Se você não quer isso, porque não basta herdar novas classes de seus dados-ACCESS aulas?

Você pode mover o código de extrair valores de leitor de dados para classe auxiliar ou a métodos de extensão.

por exemplo:.

 public int GetIntOrDefault(this DataReader dr, string fieldName, int defaultValue){
     var value = dr.GetOrdinal(fieldName);
     return (!dr.IsDBNull(value)) ? dr.GetInt32(value) : defaultValue;
 }

 internal SomeObject FillDataReader(IDataReader dr)
 {
    SomeObject obj = new SomeObject ();
    obj.ID = dr.GetInt32OrDefault("objectID", 0); // 1 line instead of 4
    ...
    return obj;
 }

Isto irá corrigir você por um tempo, embora eu recomendaria tentar algum ORM. Parece Ibatis seria fácil para uso em seu aplicativo como você investiu muito em matéria SQL. E muitos outros ORMs são fáceis também.

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