En primer lugar, NUNCA debe tener efectos secundarios en una consulta. Esa es una peor práctica. Las consultas deben responder una pregunta, no producir un efecto.
La respuesta a su pregunta es: devolver una consulta cuando la persona que llama espera una consulta; devolver una lista cuando la persona que llama espera una lista. Cuando diseñe su método, decida qué es más probable que desee la persona que llama, impleméntelo y luego documento.
Al considerar si la persona que llama desea una consulta o una lista, piensan acerca de las diferencias entre consultas y listas:
consultas están siempre actualizados. Si los objetos/bases de datos/lo que sea que consulta la consulta cambian su contenido, los resultados de la consulta cambiarán si ejecuta la consulta nuevamente. Las listas no cambian su contenido y, por lo tanto, las listas se vuelven obsoletas. Si su interlocutor necesita , los últimos datos, luego de darles una consulta. Si requieren una instantánea de los datos que pueden inspeccionar en el ocio, proporcióneles una lista.
consultas son potencialmente costosas de ejecutar para obtener sus resultados. Las listas son baratas para obtener sus resultados. Si la persona que llama es probable que quiera interrogar el resultado muchas veces y espera obtener los mismos resultados cada vez, entonces déles una lista.
La construcción de una consulta es rápida. La ejecución de una consulta para construir una lista es lenta. Una lista siempre obtiene todos los resultados de una consulta. La persona que llama puede querer restringir aún más la consulta, por ejemplo, tomando solo los primeros diez elementos. Si la persona que llama no quiere o no necesita asumir el costo de iterar por completo sobre toda la consulta, entonces déle una consulta; no tomes esa decisión en su nombre y dales una lista.
las consultas son tiny. Las listas son grande. Muchas consultas se pueden repetir en n elementos en el espacio O (1); una lista con n elementos ocupa O (n) espacio. Si el conjunto de resultados es enorme, ponerlo en una lista probablemente sea ineficiente.
y así sucesivamente.
No hay una respuesta fácil. La respuesta es la misma que la respuesta a cualquier otro problema de diseño: Tenga en cuenta todos los pros y los contras de cada solución posible en el contexto de lo que probablemente el usuario desee de la función, y luego elija una solución de compromiso razonable.
Rara vez (¿nunca?) Deberías tener efectos secundarios en tu consulta. –