2010-12-17 9 views
0

Derzeit füge ich im Grunde Verweise auf Microsoft.Practices.EnterpriseLibrary.Common .Data .ObjectBuilderC# Alternative oder aktuellere Datenzugriff dann auf Enterprise Bibliotheken

finde ich mich Halte Klasse erstellen wie ‚Produkt‘ dann eine andere Klasse, die macht eine Liste ähnlicher Produkte: Liste

public class Products : List<Product> 
{ 
    public Products() 
    { } 

    public void SelectAll() 
    { 
     Database db = DatabaseFactory.CreateDatabase(); 

      using (IDataReader r = db.ExecuteReader(cmd)) 
      { 
       while (r.Read()) 
       { 
        this.Add(new Product(Convert.ToInt32(r["PRODUCT_ID"]), 
             r["NAME"].ToString()) 
            )); 
       } 
      } 

    } 

} 


Products p = new PRoducts() 
p.SelectAll(); 

jetzt habe ich alle meine Produkte, die nett sind.

das ist okay, aber ich benutze es seit ein paar Jahren. Ich habe von LINQ und Entity Framework gehört, aber nicht wirklich den Schritt gemacht, der auch mit nHibernate gespielt wird, aber nicht wirklich zu irgendwelchen. Ist falsch, diese Methode immer noch zu verwenden.

Antwort

2

Nichts ist falsch mit dem, was Sie wissen, solange es funktioniert.

Ich würde jedoch vorschlagen, über die ORMs zu lernen, die Sie erwähnen und verstehen, was sie zu erreichen versuchen.

Was Sie nie tun sollten, ist aufhören zu lernen. Sehen Sie sich neue Frameworks und Methoden der Entwicklung an - wenn Sie sonst nichts machen, werden Sie ein besserer Programmierer.

0

Nein, es ist nicht falsch, weiterhin zu verwenden, was für Sie funktioniert.

Die Enterprise Library befindet sich noch in der Entwicklungsphase und wird voraussichtlich noch einige Zeit genutzt werden. Wir nutzen es ausgiebig und werden dies auch in absehbarer Zukunft tun.

Ich empfehle, die verschiedenen Dinge wie Entity Framework aus keinem anderen Grund als zu verstehen, was die verschiedenen Möglichkeiten da draußen für Sie tun können.

+0

Ich weiß, was du meinst, bei "echten" Projekten ist es schwierig, den Schritt zu einer neuen Methode zu machen, wenn der alte funktioniert und du weißt es gut. Mach weiter, aber ich denke, es ist der nächste Schritt. – Robert

+0

@Robert: Als eine Randnotiz haben wir ein Tool erstellt, das gen unser DAL von unserem Objektmodell basierend auf der Verwendung von Enterprise-Bibliothek codiert. Es schreibt sogar alle normalen gespeicherten Prozeduren (save, get, delete) für uns. Ziemlich glatt und unserer Meinung nach tausendmal besser als mit normalen ORM-Tools wie LINQ. – NotMe

1

Es ist nichts falsch daran, EntLib DAAB für Ihre Datenzugriffsebene zu verwenden, insbesondere wenn Sie nur wenige Klassen/Tabellen haben.

Allerdings gibt es einige bedeutende Vorteile eines ORM wie Linq2SQL, EF 4 und die neueste Version von NH mit:

  • Auto Erzeugung von Datenzugriffs und Entity-Code
  • Lazy Loading-
  • Unterstützung für LINQ-Ausdrucksbäume - dies ermöglicht eine enorme Flexibilität der Abfrage ohne SQL-Kodierung (obwohl der Nachteil weniger Sichtbarkeit in der SQL ausgeführt wird - kann Auswirkungen auf die Leistung haben)

In den meisten Fällen können Sie etwa 90% Ihrer DAL mit einem der oben genannten ORMs ausführen, und für die Feinsteuerung können Sie SPROCs manuell erstellen. In den meisten Fällen können Sie Ihre SPROCs immer noch mit den ORM-Entitäten verbinden.

+0

+1 für die Erwähnung der Sichtbarkeit von SQL und die möglichen Auswirkungen. –

0

Es ist definitiv nicht falsch, auf diese Weise Datenzugriff zu tun. Es gibt Ihnen die meiste Kontrolle über die Anweisungen, die ausgeführt werden und wie die Daten durch Ihren Code fließen.

OR-Mapper wie EF oder Hibernate bieten in einigen Szenarien mehr Komfort, haben aber auch ihre Nachteile.

0

Es ist nicht "falsch" per se, aber mit diesem Ansatz vs einer objektrelationalen Mapper (ORM) wie EF oder NH ist:

  1. ein höchster Imperativ Stil (im Gegensatz zu deklarativen - Sie sind besorgt über "wie" mehr als "was")
  2. schwieriger zu lesen
  3. schwieriger zu warten, sowohl weil es schwieriger zu lesen ist und weil eine Änderung in der Datenbank eine Kaskade von Änderungen verursachen kann in Ihrem gesamten Datenzugriffscode Basis
  4. schwieriger

würde ich vorschlagen, nicht zu testen, eine ganze Nacharbeiten, Arbeits Code-Basis in einem ORM zu arbeiten, aber es lohnt sich das Lernen und Verstehen. Ich schlage vor, zuerst LINQ-to-SQL zu betrachten, in einem Beispielprojekt auf der Seite, natürlich, da dies eine Art leichtgewichtiger, "kleiner Bruder" ORM ist, aber sehr schnell zu verwenden ist. Von dort können Sie zu EF und/oder NH weitergehen. Entity Framework ähnelt L2S in Bezug auf Gefühl und Werkzeugausstattung, während NHibernate eine steilere Lernkurve aufweist, jedoch leistungsfähiger/flexibler ist.

Auch hier ist nichts falsch an der Verwendung von Enterprise Library und Datenreadern, aber es gibt echte Vorteile und in der Regel Zeiteinsparungen bei der Verwendung von ORMs, vor allem, dass die "schmutzige Arbeit" des Datenzugriffs erledigt und fast garantiert ist weniger Defekte haben und effizienter sein als handgerollter Datenzugriff.

Das heißt, für sehr kleine Projekte mit eingeschränkter Nutzung einer Datenbank, alle zusätzlichen Abstraktionen möglicherweise nicht notwendig, und gerade ADO .NET wird schneller und einfacher.