Question

J'ai un grand nombre de classes d'accès aux données dans l'un de mes projets, mais ces classes deviennent extrêmement volumineuses à cause du code qui extrait les données des lecteurs de données.

Mon code ressemble généralement à ceci:

// 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;
}

Certaines des méthodes de remplissage frappent facilement plus de 400 lignes. Existe-t-il un moyen décent de les séparer? Des cours partiels seraient-ils acceptables? Dans un monde idéal, j'utiliserais un ORM, mais je ne peux malheureusement pas me permettre le temps d'apprendre à en utiliser un.

Était-ce utile?

La solution

Vous pouvez certainement utiliser des classes partielles pour scinder le code des méthodes Fill. Vous pouvez même utiliser un système de modèles pour générer ces fichiers de classe partiels.

Cela dit, un ORM est une solution plus simple et ne prend pas vraiment beaucoup de temps à déterminer si vos besoins sont simples.

Pour les besoins de base pour lesquels vous n'avez pas besoin d'un contrôle précis, LINQ to SQL fonctionne comme une gâterie et contrairement à ce que beaucoup pensaient être mis à jour dans le cadre de VS 2010 / .NET 4.

Une autre option est Entity Framework, qui est également mise à jour dans le cadre de VS 2010 / .NET 4. Elle vous donne beaucoup plus de contrôle, mais peut également nécessiter un peu plus d’apprentissage.

Combien de temps faut-il pour créer ces méthodes de remplissage de plus de 400 lignes? Êtes-vous sûr de ne pas pouvoir utiliser ce temps pour apprendre un ORM? Aucun programmeur ne doit se sentir obligé d’écrire constamment du code de type cookie (par exemple, les méthodes ADO.NET Fill), cela peut rapidement rendre la programmation plus agréable!

Autres conseils

Les classes partielles vous aideront à séparer votre code, mais les fichiers devront être dans le même projet. Si vous ne le souhaitez pas, pourquoi ne pas simplement hériter de nouvelles classes de vos classes d'accès aux données?

Vous pouvez déplacer le code d'extraction de valeurs d'un lecteur de données vers une classe d'assistance ou une méthode d'extension.

Exemple:

 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;
 }

Cela vous remédiera un moment, bien que je vous recommande d'essayer un ORM. Il semble que IBatis serait facile à utiliser dans votre application, car vous avez beaucoup investi dans les applications brutes. SQL. Et de nombreux autres ORM sont également faciles.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top