J'ai une application multi-couche qui commence par le modèle référentiel pour tous les accès aux données et renvoie IQueryable à la couche de services. La couche Services, qui inclut toute la logique métier, renvoie IList aux contrôleurs (remarque: j'utilise ASP.NET MVC pour la couche d'interface utilisateur). L'avantage de renvoyer IQueryable dans la couche d'accès aux données est qu'il permet à mes référentiels d'être extrêmement simples et de différer les requêtes de la base de données. Cependant, je déclenche les requêtes de base de données dans ma couche services afin que mes tests unitaires soient plus fiables et que je ne donne pas de flexibilité aux contrôleurs pour remodeler mes requêtes. Cependant, j'ai récemment rencontré plusieurs situations où le report de l'exécution des requêtes vers le bas aux contrôleurs aurait été beaucoup plus performant parce que les contrôleurs ont dû faire des projections sur les données qui étaient spécifiques UI. De plus, avec l'émergence de choses comme oData, je commençais à me demander si les points de terminaison (par exemple, l'interface web ou l'API web) devraient fonctionner directement avec IQueryable. Quelles sont vos pensées? Est-il temps de retourner IQueryable de la couche services à la couche UI? Ou coller avec IList?Il est temps de commencer à retourner IQueryable <T> au lieu de IList <T> à mon API Web UI/Web couche?
Ce fil ici: To return IQueryable<T> or not return IQueryable<T> semble se porter garant pour le retour IList aux couches de l'interface utilisateur, mais je me demandais si les choses changent à cause des nouvelles technologies émergentes et techniques.
En fait, le fil que vous Liées est agnostique; il ne favorise pas d'une façon ou d'une autre. Les développeurs pilotés par les tests vont toujours favoriser la * fixation * de l'interface, ce qui la rend plus prévisible. Personnellement, j'aime la flexibilité et l'exécution paresseuse de IQueryable. Vous pouvez toujours appeler ToList() juste avant de le placer dans l'interface utilisateur. –