Frage

Ich habe eine Menge von Klassen für den Datenzugriff in einem meiner Projekte, aber diese Klassen werden immer extrem sperrig wegen der Code, der die Daten aus den Datenleser abruft.

Mein Code im Allgemeinen sieht wie folgt aus:

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

Einige der Fill-Methoden schlagen leicht 400+ Linien, so ist es eine anständige Art und Weise diese heraus zu trennen? Würde Teilklassen akzeptabel? In einer idealen Welt würde ich ein ORM verwenden, aber leider kann ich die Zeit nicht leisten, zu lernen, wie man verwenden.

War es hilfreich?

Lösung

Sicherlich könnten Sie partielle Klassen verwenden Sie den Code für die Fill-Methoden zu spalten weg. Sie aussehen könnten sogar ein Template-System bei der Verwendung dieser Teilklassendateien zu erzeugen.

Wie gesagt, ein ORM ist eine einfachere Lösung und dauert nicht wirklich so lange zu arbeiten, wenn Ihre Bedürfnisse einfach sind.

Für die Grundbedürfnisse, wo Sie brauchen keine Feinsteuerung LINQ to SQL arbeitet ein Genuss, und im Gegensatz zu dem, was viele dachten, ist es als Teil von VS 2010 / .NET 4 aktualisiert zu werden.

Eine weitere Möglichkeit ist Entity Framework, das auch als Teil von VS 2010 / .NET aktualisiert 4. Es gibt Ihnen viel mehr Kontrolle, aber auch ein bisschen mehr Lernen erfordern kann.

Wie lange dauert es, Sie nehmen diese 400+ Linie lang, geben Sie bitte Methoden erstellen? Sind Sie sicher, dass Sie konnte nicht diese Zeit nutzen, ein ORM zu lernen? Kein Programmierer sollte ständig fühlen gezwungen, Cookie-Cutter-Code (z ADO.NET Fill-Methoden) zu schreiben, kann es schnell die Freude aus der Programmierung nehmen!

Andere Tipps

Partielle Klassen helfen Ihnen, Ihren Code zu trennen, aber die Dateien werden im selben Projekt sein. Wenn Sie dies nicht wollen, warum nicht nur erben neue Klassen von Daten-Zugriff-Klassen?

Sie können Code zu extrahieren Werte von Datenleser bewegen Klasse Helfer oder Erweiterungsmethoden.

Z. B:.

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

Dies wird beheben Sie für eine Weile, obwohl es würde ich empfehlen, einige ORM zu versuchen. Es scheint, iBatis leicht sein würde, in Ihrer Anwendung verwenden, wie Sie eine Menge in rohen investiert haben SQL. Und viele andere ORMs sind zu einfach.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top