ASP MVC: Sollten Dienste IQQueryable zurückgeben?

8

Was denkst du? sollte Ihr DAO ein IQueryable zurückgeben, um es in Ihren Controllern zu verwenden?

    
SDReyes 06.02.2010, 22:52
quelle

4 Antworten

4

Im Moment klingt es attraktiv, aber ist wirklich nicht .

    
Mark Seemann 06.02.2010, 22:57
quelle
5

Nein. Ihre Controller sollten keine komplexe Logik verarbeiten. Halte sie schlank. Das Modell (nicht DAO) sollte dem Controller alles zurückgeben, was er benötigt, um auf die Ansicht zu gelangen.

Das Anzeigen von Abfragen (oder sogar Abfragen) in einer Controller-Klasse ist etwas, das ich als Code-Geruch betrachten würde.

    
Aaronaught 06.02.2010 22:54
quelle
4

Ich gebe IQueryable gerne an meine Controller weiter, weil ich während der gesamten Lebensdauer meiner Apps-Entwicklung keine lahmen Paging- und Sortiermethoden in jeder einzelnen DAO-Methode und Schnittstelle erstellen muss.

%Vor%

wird schnell

%Vor%

Immer wieder und wieder und wieder. Bleck!

Mit IQueryable können Sie Paging und Sortierung von Tools auf orthogonale Weise durchführen, z. B. indem Sie das IPagedList-Projekt nutzen. Durch die Rückgabe von IQueryable erhalten Sie außerdem einfachen Zugriff auf das gesamte Objekt .Count () ohne mehr Perversion Ihrer Datenschicht.

@Roberts Argument von IQueryable entspricht fetten Controllern ist sehr wackelig. Ein Fat Controller wäre den aufgeblähten .aspx.cs Seiten von früher ähnlich. Wenn alles, was du tust, sich mit deiner DAL verbindet und dann die Ergebnisse von dir versendst, erhältst du nicht "Fettheit" von deiner Abfragetechnik, du erhältst es von viel Logik innerhalb einer einzigen Klasse. Sie erhalten keinen Fat Controller aufgrund Ihrer Datenzugriffsmethoden, es sei denn, Sie beginnen mit der Protokollierung, Benachrichtigungen und anderen orthogonalen Problemen.

%Vor%

gegen:

%Vor%

Ich sehe keinen zwingenden Unterschied.

@Mark Seemanns Antwort ist gleichermaßen wackelig. Sicher, Sie können Ihre gesamte Datenschicht in der Mitte eines Projekts ändern, aber das wird ein komplexes Desaster sein, egal wie abstrahiert Sie sind. Das von ihm verwendete Beispiel ist der Wechsel von Linq2Sql in den Tabellenspeicher von Windows Azure. RDBMS zu Schlüssel / Wert speichern? Und der Schwachpunkt ist Ihre Repository-Implementierung? Von RDBMS zu einem Key / Value Store zu gehen, wird eine Verrücktheit sein, die egal was ist.

Mark bringt auch Domain Driven Design in seine Argumentation. Ist das die Art von System Ihres Gebäudes? Gibt es genug "Domain" statt reine CRUD-Szenarien, die diesen Ansatz wertvoll machen? Wenn nicht, warum?

Die Verwendung von LINQ und der IQueryable-Schnittstelle verringert den Aufwand, Datenschichten trotzdem zu wechseln. Wenn Sie zwischen ORMs wechseln, die LINQ und IQueryableProvider unterstützen (ich denke, das ist der Name), interessiert sich nur der Downstream-Code für diese Änderung. Ihre Controller würden die gleichen Wechsel zwischen den meisten ORMs auf dem Markt bleiben.

    
jfar 07.02.2010 05:16
quelle
2

Wenn Sie dem "fat models, skinny controllers" -Paradigma folgen, dann no.

Siehe diesen Beitrag auf der Fat Controller Anti-Muster .

    
Robert Groves 06.02.2010 22:58
quelle

Tags und Links