2012-03-28 5 views
2

Ich bin neues Muster zu der Verwahrungsstelle, und ich kommen die folgenden Fragen:Repository Muster: Begrenzung, Zweck und Nutzen

  1. Was ist/sind der Zweck des Repository-Muster?
  2. Was ist/sind die Beschränkungen des Repository-Musters?
  3. Welche Vorteile hat das Repository-Muster?
  4. Sollen die folgenden Methoden im Repository-Muster verfügbar gemacht werden?

public IQueryable<T> GetQuery(){ 
    return _objectSet; 
} 

public IEnumerable<T> GetAll(){ 
    return GetQuery().AsEnumerable(); 
} 

public IEnumerable<T> Find(Expression<Func<T, bool>> predicate){ 
    return _objectSet.Where(predicate); 
} 

public T Single(Expression<Func<T, bool>> predicate){ 
    return _objectSet.Single(predicate); 
} 

public T First(Expression<Func<T, bool>> predicate){ 
    return _objectSet.First(predicate); 
} 

Jede Hilfe bitte?

Antwort

0

1.Was ist der Zweck des Repository-Musters?

Um die Datenquelle zu abstrahieren, um die Komplexität zu reduzieren. Auf diese Weise müssen die Anrufer keine Kenntnisse über die Datenquelle oder ihre Eigenheiten haben. Sie wissen nur, dass sie das Repository aufrufen und Informationen aus einer beliebigen Datenquelle abrufen können.

2.Was ist/sind die Beschränkungen des Repository-Musters?

Es wird nur zum Abstrahieren der Datenquelle verwendet.

Eine weiche Grenze ist, dass es für die Leute schwer zu verstehen ist, wie die Repository-Klassen entworfen werden. Es ist üblich, dass Leute die Repositories zu generischen machen, was wiederum die DB-Implementierung zum Aufrufer verleitet, wodurch der Aufrufer DB-spezifische Kenntnisse (oder OR/M-Kenntnisse) erzwingt. Diese Implementierungen sind ernsthaft fehlerhaft und bieten keinen Vorteil gegenüber der direkten Verwendung von OR/MS.

3.Was sind die Vorteile des Repository-Musters?

Weniger komplexer Code. Der Aufrufer ist weniger komplex, da er nur eine Methode im Repository aufrufen muss, um Informationen in der Datenquelle abzurufen und zu speichern. Und die Data Access Layer werden weniger komplex, weil die Repositories sich nur auf das Re-Reagieren und Speichern von Informationen konzentrieren.

4.Die folgenden Methoden sollten im Repository-Muster offen gelegt werden?

Nr. IQueryable<T> Lecks DB spezifische Informationen. Sie müssen zum Beispiel wissen, wie die OR/M-Handles LINQ nach IN SQL-Klauseln übersetzen und wie das OR/M für das faule/eifrige Laden konfiguriert ist.

Um die Komplexität zu reduzieren, sollte das Repository mitteilen, welche Art von Abfragen es unterstützt. Mit Expression<Func<T, bool>> predicate ist wie sagen werfen Sie alles auf mich und ich werde versuchen, damit umzugehen. Wird nicht sehr gut funktionieren. Nochmal. Nehmen Sie die IN-Klausel als Beispiel. Die LINQ-Anweisung dafür variiert zwischen verschiedenen OR/MS.

Mithilfe von Ausdrücken wird auch die Verantwortung für die Konstruktion korrekter Abfragen an den Aufrufer übertragen.Das bedeutet, dass die Komponententests für den Aufrufer auch Tests enthalten müssen, um zu bestätigen, dass der Aufrufer korrekte Abfragen durchführt. d. h. komplexere Tests.

+0

Wenn das Repository eine Methode wie GetCarByNumberofVechile() enthält, sieht es so aus, als wäre meine Geschäftslogik im Repository. Wenn ich weiter GetCarByNumberOfHorsePower() hinzugefügt, das ist auch Business-Logik. Schließlich Business-Logik-Layer sieht wie Decorator. Ich denke, dass eine bessere Lösung ist, Geschäftslogik in eine Business-Schicht zu schreiben, aber in repository schreiben Code, der Abfrage von BLL übersetzt (GetCarByNumberofVechile()) in Speicher spezifische Sprache (es kann einfach txt sein) – Shark

+0

Nein, es ist nicht Geschäftslogik. BL ist eine Art von Berechnung. Wenn Sie eine Abfrage für ein bestimmtes Statusattribut (Pferdestärken) durchführen, ist dies eine einfache Abfrage, bei der Sie den Attributwert vergleichen. – jgauffin

+0

Ich habe dich wirklich nicht verstanden. Business-Analyst sagte mir: "Autos nach Anzahl von Vechile bekommen" also für mich ist dies eine Geschäftslogik. Außerdem ist BL GetById und so weiter. Vielleicht müssen wir schließen, was BL ist? – Shark