Tout d'abord, vous ne devriez JAMAIS avoir d'effets secondaires dans une requête. C'est une pire pratique. Les requêtes doivent répondre à une question, ne pas produire d'effet.
La réponse à votre question est: renvoyer une requête lorsque l'appelant attend une requête; renvoie une liste lorsque l'appelant attend une liste. Lorsque vous concevez votre méthode, décidez ce que l'appelant est le plus susceptible de vouloir, implémentez-le, puis document.
Pour déterminer si l'appelant veut une requête ou une liste, pensez à les différences entre les requêtes et les listes:
requêtes sont toujours à jour. Si les objets/bases de données/tout ce que la requête interroge change son contenu, les résultats de la requête changeront si vous réexécutez la requête. Les listes ne changent pas leur contenu et, par conséquent, les listes sont périmées. Si votre appelant nécessite les dernières données puis leur donner une requête. S'ils ont besoin de un instantané des données qu'ils peuvent inspecter à loisir puis leur donner une liste.
Les requêtes sont potentiellement coûteuses à exécuter pour obtenir leurs résultats. Les listes ne coûtent pas cher pour obtenir leurs résultats. Si l'appelant est susceptible de vouloir interroger le résultat plusieurs fois et s'attend à obtenir les mêmes résultats à chaque fois, donnez-lui une liste. La construction d'une requête est rapide. L'exécution d'une requête pour construire une liste est lente. Une liste obtient toujours tous les résultats d'une requête. L'appelant peut vouloir restreindre davantage la requête, en ne prenant par exemple que les dix premiers éléments. Si l'appelant ne veut pas ou ne doit pas prendre en charge l'itération complète sur l'ensemble de la requête, donnez-lui une requête; ne prenez pas cette décision en leur nom et donnez-leur une liste.
les requêtes sont minuscule. Les listes sont gros. De nombreuses requêtes peuvent être itérées sur n éléments dans l'espace O (1); une liste avec n éléments occupe l'espace O (n). Si le résultat est énorme, le mettre dans une liste est probablement inefficace.
et ainsi de suite.
Il n'y a pas de réponse facile. La réponse est la même que la réponse à tout autre problème de conception: Examinez tous les avantages et les inconvénients de chaque solution possible dans le contexte de ce que l'utilisateur de la fonction souhaite le plus probablement, puis choisissez une solution de compromis raisonnable.
Vous devriez avoir (rarement?) Des effets secondaires dans votre requête. –