J'utilise CodeIgniter et j'ai un modèle qui récupère toutes les recettes où vous pouvez définir le décalage et la limite. Devrais-je étendre cette fonction pour récupérer une seule recette? Est-ce une bonne pratique?Dois-je implémenter des fonctions polyvalentes?
0
A
Répondre
2
Votre objectif devrait être de minimiser la duplication de code tout en maximisant la compréhensibilité. Ces deux sont souvent en désaccord. Vous pouvez vous retrouver avec une duplication de code minimale mais avoir 12 paramètres optionnels pour une fonction. Donc, quelques conseils généraux:
- Envisager l'emballage des fonctionnalités communes dans une troisième fonction, puis les deux fonctions peuvent appeler à la fois que nécessaire;
- L'utilisation d'un objet ou d'un tableau d'arguments a plus de 3-4 paramètres pour une fonction;
- La duplication de code doit être minimisée et non complètement éliminée. Parfois, la solution la plus claire implique une certaine quantité de duplication de code;
- Le but d'une fonction ou d'un objet doit être clair. Si ce qu'il fait change complètement en fonction d'un paramètre, alors vous allez probablement confondre les gens.
Avec votre cas, je pense que vous voudriez finir avec quelque chose comme:
function get_recipes($offset, $limit) {
// execute query and get resource
$ret = array();
while ($row = mysql_fetch_assoc($rs)) {
$ret[] = build_recipe($row);
}
return $ret;
}
function get_recipe($id) {
// execute query and get row object
return build_recipe($row);
}
function build_recipe($row) {
// construct a recipe object from the row
}
1
En général, pour plus de clarté, une fonction doit faire une seule tâche. Cependant, "obtenir N lignes" est une tâche unique - même lorsque N == 1; donc je dirais que cette affaire est qualifiée, c'est-à-dire que la fonction n'est PAS vraiment "multi-usage"! -)
-1
La réponse à cette question est simple.
Rappelez-vous simplement que Worse is better
Questions connexes
- 1. Implémenter une carte en javascript qui supporte les méthodes objet comme des fonctions mappées?
- 2. JavaScript comme des fonctions anonymes en C#
- 3. Débogage des fonctions javascript
- 4. Liste des fonctions C++
- 5. Trouver des fonctions Javascript inutilisées?
- 6. Évaluation efficace des fonctions hypergéométriques
- 7. Voir la valeur des fonctions
- 8. Description efficace des fonctions PHP
- 9. C fonctions surutilisation des paramètres?
- 10. Comment implémenter un comparateur utilisant des génériques?
- 11. Comment implémenter des énumérations COM sécurisées?
- 12. Comment implémenter des logos saisonniers dans Drupal?
- 13. Comment implémenter des rappels en Java
- 14. Comment implémenter efficacement des sessions dans GAE?
- 15. Gestion des documents (meilleure stratégie à implémenter)
- 16. Fonctions imbriquées: Utilisation incorrecte des effets secondaires?
- 17. Passer des expressions aux fonctions en python?
- 18. Coût des fonctions de liste en Python
- 19. Meilleure méthode pour l'inversion des fonctions
- 20. problème C++ des fonctions mathématiques (sous Linux)
- 21. Lisibilité des fonctions de rappel AJAX imbriquées
- 22. Performance des fonctions vides en PHP
- 23. Liste des fonctions «magiques» de Scala
- 24. RhinoMock test simule l'interface des fonctions vides?
- 25. Remplacement des fonctions javascript en utilisant PHP
- 26. déclencher des fonctions avec facebook connect
- 27. Déclarer des fonctions externes selon qu'elles existent
- 28. C: analyse de dépendance des fonctions
- 29. Utiliser exec() avec des fonctions récursives
- 30. Test des fonctions privées en javascript
En fait, je l'ai combiné get_recipe et get_recipes. Si l'identifiant est défini et que les autres paramètres sont NULL, il ne renvoie qu'un seul champ, etc. – alimango
Je pense que c'est potentiellement un peu déroutant, mais c'est difficile à dire sans détails. En règle générale, je préfère un schéma comme j'ai fait qui a clairement nommé les fonctions (bien que ces trois pourraient être mieux nommés) qui utilisent la décomposition fonctionnelle pour réduire la duplication. – cletus
Je suis d'accord avec Cletus en séparant le 'get_recipe' de' get_recipes'. Il sera plus facile pour celui qui tiendra votre code de comprendre votre code. – Randell