Frage

LINQ zu SQL erstellt Objekte, die iQuerierbar und voller Beziehungen sind.
HTML -Helfer benötigen spezifische Schnittstellenobjekte wie IEnumerable<SelectListItem>.

Was ich denke, könnte passieren:

  • Verwenden Sie die Objekte von linq zu SQL ohne das gesamte Gepäck, dh POCOs vom LINQ an SQL -Objekte ohne zusätzliche Domänenmodellklassen zurück?
  • Extrahieren Sie Objekte, die leicht in HTML -Helferobjekte wie die Aufzählung von SELECTILISTISTEM konvertieren (oder sind).

Gibt es eine Möglichkeit, dies zu tun, ohne die Bedenken zu brechen? Ein ordentlicher OOP -Trick, um die Bedürfnisse zu überbrücken?

Wenn dies beispielsweise in einem Repository wäre, wäre die Selektionsliste nicht da. Das select new ist eine schöne Möglichkeit, ein Objekt vom Linq zu SQL ohne Gepäck auszuschneiden, aber es verweist immer noch auf eine Klasse, auf die nicht verwiesen werden sollte:

 IEnumerable<SelectListItem> result = (from record in db.table
                                       select new SelectListItem {
                                           Selected = record.selected,
                                           Text= record.Text, 
                                           Value= record.Value }
                                      ).AsEnumerable();
War es hilfreich?

Lösung

Ich habe den Benutzer einer Iservice -Schnittstelle und einer Dienstklasse gesehen. Grundsätzlich ist es der Schritt zwischen dem Repository und dem Controller.

Profis:

  • Ermöglicht Methoden, die die Rückgabewerte von Irepository -Aktionen manipulieren
  • Gute Trennung von Bedenken
  • Kann die Brücke sein, an der die Validierungslogik vor dem Repository lebt.
  • Kann mit Abhängigkeitsinjektionsrahmen/-mustern funktionieren

Nachteile:

  • Mucho -Duplizierung des Code. Wenn Sie das Repository nicht aufdecken, werden Sie wahrscheinlich fast alle Ihre Irepository -Methoden im Iservice duplizieren
  • Kann eine "Catch-All"-Klasse werden. Die Gottklasse, die alles tut! Muahahaha ... etc.

Ich bin sicher, es gibt mehr, aber das habe ich gesehen und verwendet.

Andere Tipps

In diesem spezifischen Beispiel können Sie in Ihrer Teilklassendefinition eine ToselectListItem () -Methode oder ähnlich erstellen, um die Duplikation zu entfernen. Oder vielleicht wäre eine Erweiterungsmethode besser, um dort eine Kopplung zu vermeiden.

Bearbeiten: Ich verwende im Allgemeinen JSON -Webdienste mit DTOs. Ich könnte ProductDto haben, das meine abgeflachte jSON-freundliche Darstellung meines Produkts L2SQL-Unternehmen ist. Dann muss ich nur Select productdto.fromproduct (Produkt) in meiner Abfrage anrufen. Die Duplikation ist jetzt minimal.

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