2009-10-26 5 views
3

J'ai beaucoup de classes pour accès aux données dans un de mes projets, mais ces classes deviennent extrêmement volumineux en raison du code qui récupère les données des lecteurs de données.Classes partielles et données le code d'accès

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 Fill facilement atteindre plus de 400 lignes, donc est-il un moyen convenable de les dissocier? Des cours partiels seraient-ils acceptables? Dans un monde idéal, j'utiliserais un ORM, mais je ne peux malheureusement pas me permettre d'apprendre à l'utiliser.

Répondre

4

Certainement, vous pouvez utiliser des classes partielles pour séparer le code pour les méthodes de remplissage. Vous pourriez même envisager d'utiliser un système de template pour générer ces fichiers de classe partielle.

Cela dit, un ORM est une solution plus simple et ne prend pas vraiment de temps pour travailler si vos besoins sont simples.

Pour les besoins de base où vous n'avez pas besoin de contrôle fin LINQ to SQL fonctionne un traitement, et contrairement à ce que beaucoup pensaient qu'il devient mis à jour dans le cadre de VS 2010/.NET 4.

Une autre option est Entity Framework , étant également mis à jour dans le cadre de VS 2010/.NET 4. Il vous donne beaucoup plus de contrôle, mais peut également exiger un peu plus d'apprentissage.

Combien de temps vous faut-il pour créer ces 400+ longue ligne de remplissage des méthodes? Êtes-vous sûr de ne pas pouvoir utiliser ce temps pour apprendre un ORM? Aucun programmeur ne devrait se sentir obligé d'écrire constamment un code de cookie-cutter (par exemple des méthodes de remplissage ADO.NET), il peut rapidement enlever la joie de la programmation!

+0

Convenu - Bien sûr, certains ORM ne prennent beaucoup de temps pour apprendre, mais si vous ne pouvez pas apprendre LINQ to SQL dans le temps qu'il faut pour écrire une méthode 400 en ligne, tout ce que je peux dire est ... euh , vous devez être très rapide à l'écriture des méthodes de 400 lignes! ** sourire ** – itowlson

+0

Je ne serais pas d'accord que LinqToSql ou tout autre ORM est rapide et/ou facile à apprendre. La plupart des personnes qui étudient LinqToSql sont confrontées à des problèmes liés à la gestion de la durée de vie de DataContext, au détachement avant une mise à jour et à bien d'autres problèmes ORM normaux. –

+0

J'ai une application que j'ai écrite pour me donner le code, donc l'écriture du code de cookie cutter n'est pas vraiment un problème. Cela ne me dérangerait pas de passer au framework Entity, mais il est peu probable que nous passions à VS2010 pendant un bon moment. –

0

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

0

Vous pouvez déplacer le code de l'extraction de valeurs lecteur de données Helper classe ou à des méthodes d'extension.

.: par 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édier pendant un certain temps, bien que je vous recommande d'essayer quelques ORM. Il semble que IBatis serait facile à utiliser dans votre application car vous avez beaucoup investi dans le SQL brut. Et beaucoup d'autres ORM sont faciles aussi.

Questions connexes