Ok, je n'essaie pas de lancer une guerre de flammes ici, et je sais que l'argument entre les langages statiques et dynamiques a été banni plusieurs fois, y compris ici. Mais j'ai une question très pratique que j'espère que quelqu'un ici pourra éclaircir. Désolé pour la longueur, mais ce n'est pas une question simple avec probablement pas une réponse simple. Ruby, PHP, et Javascript sont des langages très populaires ces jours-ci, et ils ont beaucoup de gens qui les défendent et soutiennent qu'être dynamiquement typé ne retient pas le développeur. Je suis novice dans ces langues et je voudrais commencer à les utiliser pour des projets plus importants, mais voici un scénario de refactoring de base qui revient tout le temps au travail (work == C#), et je me demande quelle serait l'approche dans Ruby - J'ai choisi Ruby parce que c'est OO. Ok, j'utilise Ruby, et je construis un objet Client. Il a des méthodes pour charger/sauvegarder/supprimer de la base de données. C'est bon et les gens l'utilisent. J'ajoute plus de méthodes pour d'autres choses et les gens l'utilisent plus. J'ajoute une méthode pour calculer l'historique des commandes en fonction de certains paramètres. A présent, cette classe est utilisée dans tout le système. Puis, un jour, je décide de changer les paramètres de la méthode GetOrderHistory. Alors je:Refactoring avec un langage typé dynamiquement
- ajouter les nouveaux paramètres à la méthode
- Réécrire le code de la méthode à utiliser les nouveaux paramètres
- modifier le code client j'avais à l'esprit pour passer les nouveaux paramètres et utiliser cette modifiés méthode
Mais maintenant quoi? J'ai des dizaines/centaines/whoknows combien d'autres endroits dans le système qui ont besoin d'être changé. Dans un langage OO dynamique comme Ruby ou Javascript, comment pourrais-je m'y prendre?
Du haut de ma tête, ne sachant pas très bien Ruby, je peux penser à deux réponses stupides:
- 100% de couverture de code. Je teste l'application entière et chaque fois qu'elle casse, je vois si c'est cette méthode et la corrige
- Rechercher et remplacer. J'utilise la recherche de texte pour rechercher cette méthode. Mais je pourrais avoir d'autres objets avec les mêmes noms de méthodes.
Alors, y a-t-il une bonne réponse? Il semble que l'IDE aurait du mal. Si j'avais un code tel que
c = Customer.new
il serait en mesure de le comprendre, mais s'il est
c= SomeFunctionThatProbablyReturnsACustomerButMightReturnOtherThings()
Alors, quelle approche vous experts Ruby prendre dans ce cas?
Je suis assez sûr que le refactoring ne devrait pas casser les contrats existants ... – CurtainDog
@CurtainDog qu'en est-il de renommer une fonction privée dans une bibliothèque? – Toskan
un autre bon exemple est ruby et python. Puis-je vous rappeler amicalement, que ni ruby, ni python, s'en tenir à ce que vous venez de dire lors de la sortie de nouvelles versions? – Toskan