Quels sont les avantages ou les inconvénients de l'un ou de l'autre?Vaut-il mieux renvoyer le type le plus spécifique ou le plus général d'une méthode d'action?
Répondre
Mes directives ont toujours été plus spécifique sur, et le plus général.
Le type de données plus générales, moins le code qui l'utilise sait le type de données. Par exemple, si une méthode retourne une collection, je retournerai la nouvelle collection créée par la méthode. Si elle renvoie une structure de données interne, je l'augmenterais jusqu'à IEnumerable<T>
. Cependant, s'il retourne un tableau, ou un List<T>
parce que c'est ce qu'il a construit en interne, le code qui récupère vos données a maintenant accès à plus de fonctionnalités sur votre collection. Pour renvoyer le type de données le plus général (dans certaines limites), vous devez toujours renvoyer IEnumerable<T>
ou similaire pour toutes les collections, même si la méthode a construit un nouveau tableau en interne et l'a retourné. Le code appelant doit maintenant copier manuellement le contenu de la collection dans un nouveau tableau ou une nouvelle liste, si c'est ce que le code appelant doit utiliser.
Cela signifie plus, et dans la plupart des cas, un travail inutile. Comme pour l'entrée, je vais pour le type le plus général que je peux utiliser, donc pour les collections, sauf si j'ai spécifiquement besoin d'un tableau ou une liste ou similaire, je vais accepter IEnumerable<T>
. En faisant cela, je m'assure que le code d'appel a moins de travail à faire. Cela pourrait signifier que je dois faire un peu de travail à l'interne, donc c'est un compromis.
La partie importante est d'atteindre un équilibre. Ne soyez pas trop général ou trop spécifique, tout le temps, à chaque fois. Déterminez le bon type qui a du sens et considérez ce que le code appelant doit faire pour transmettre des données ou accepter les données sortantes de votre code. Le moins de travail, le meilleur.
En général, je voudrais aller pour le type plus général. De cette façon, je ne vais pas casser un client qui pourrait utiliser les informations sur le type de retour.
Si je retourne un type plus général, dans l'implémentation de la méthode d'action je peux toujours changer le type à quelque chose de différent. Considérez le scénario suivant: Vous renvoyez un résultat d'action personnalisé qui dérive de ActionResult
. Quelque part dans votre base de code quelque chose fait l'hypothèse que la valeur de retour est MyCustomActionResult
. Dans ce cas, si vous avez modifié la valeur de retour, vous devez supprimer le code client. BTW: Je fais de même - en retournant le type général le plus approprié - pour toutes les méthodes non seulement pour les méthodes d'action.
Modifier: Veuillez noter que cela ne signifie pas que je retournerais object
. Le défi consiste à trouver le type qui représente l'abstraction «la plus appropriée».
- 1. Une manière plus facile ou mieux de le faire?
- 2. Quel est l'algorithme "unificateur le plus général" optimal?
- 3. Quel est le framework AJAX le plus simple, le plus réputé et le plus expérimenté?
- 4. Existe-t-il un type "itérable" le plus général accepté par Java pour chaque boucle?
- 5. Comment mieux contourner le regroupement plus strict de PostgreSQL
- 6. Quel est le sélecteur le plus correct/le plus efficace?
- 7. Le type le plus rapide pour la clé std :: map?
- 8. Envoi du type MIME le plus correct
- 9. Restreindre le type de paramètre de méthode avec deux noms de classe ou plus?
- 10. Réflexion GetMethod. sélectionnez une méthode plus spécifique
- 11. GL_POINTS ou quads le plus rapide?
- 12. Quel est le comptage le plus rapide, horizontal ou vertical?
- 13. Syncro? Tortue? Le client Subversion le plus rapide et le plus fiable pour Windows 7
- 14. Plus spécifique NSNumberFormatter comportement d'échec
- 15. Lucene: Le moyen le plus rapide pour renvoyer le document occurance d'une phrase?
- 16. Algorithme de tri le plus rapide pour une situation spécifique
- 17. Le plus efficace DHT
- 18. cookie le plus long
- 19. Bit le plus significatif
- 20. valeur du champ le plus apparié
- 21. Quel type d'animation Flash fonctionne le mieux pour les jeux?
- 22. Quel est le protocole B2B le plus répandu, le plus stable et le plus prêt pour l'avenir (de préférence ouvert)?
- 23. Lequel est le plus rapide - INSTR ou LIKE?
- 24. Django/SQL: qu'est-ce qui est le plus efficace, plus de colonnes ou plus de tables?
- 25. Renvoyer le type générique dans un WebService
- 26. Requête T-SQL UNION pour renvoyer les éléments ayant le classement le plus élevé et le plus bas de la même table
- 27. La conception d'une interface générique nécessite le paramètre type sur le type ou la méthode?
- 28. insertAt en F # plus simple et/ou mieux
- 29. Trimestre le plus proche
- 30. jQuery le plus proche();
Vous renvoyez donc 'object' de tout? – Timwi
Certainement pas. Apparemment, je n'ai pas réussi à le préciser dans ma réponse. Je vais clarifier cela. – Manfred