J'ai récemment lu le billet de blog Three Big Lies et j'ai du mal à justifier le deuxième mensonge, qui est cité ici:
(LIE # 2) LE CODE DEVRAIT ÊTRE CONÇU AUTOUR D'UN MODÈLE DU MONDE
Il n'y a aucune valeur à ce que le code soit une sorte de modèle ou de carte d'un monde imaginaire. Je ne sais pas pourquoi celui-ci est si convaincant pour certains programmeurs, mais il est extrêmement populaire. S'il y a une fusée dans le jeu, soyez assuré qu'il y a une classe "Rocket" (en supposant que le code est C ++) qui contient des données pour exactement une fusée et fait des choses rockety. Sans aucune considération pour ce que la transformation des données est réellement en cours, ou pour la disposition des données. Ou d'ailleurs, sans comprendre fondamentalement que là où il y a une chose, il y en a probablement plus d'une.
Bien qu'il existe de nombreuses pénalités en termes de performances pour ce type de conception, la plus importante est qu'elle n'est pas évolutive. Du tout. Cent roquettes coûtent cent fois plus qu'une roquette. Et il est extrêmement probable que cela coûte encore plus que cela! Même pour un non-programmeur, cela ne devrait pas avoir de sens. Économie d'échelle. Si vous avez plus de quelque chose, cela devrait coûter moins cher, pas plus cher. Et la façon de le faire est de concevoir correctement les données et de regrouper les choses par des transformations similaires.
Voici mes problèmes avec ce mensonge en particulier.
Le code est un modèle / carte d'un monde imaginaire, car la modélisation du monde imaginaire aide (au moins moi, personnellement) à visualiser et à organiser le code.
Avoir une classe "Rocket" est, pour moi, un choix parfaitement valable pour une classe. Peut-être que les "fusées" pourraient être décomposées en types de fusées comme AGM-114 Hellfire, etc. qui contiendraient la force de la charge utile, la vitesse maximale, le rayon de braquage maximal, le type de ciblage, etc. et une vitesse.
Bien sûr, avoir 100 fusées coûte plus d'une fusée. S'il y a 100 Rockets à l'écran, il doit y avoir 100 calculs différents pour mettre à jour leur position. Le deuxième paragraphe semble donner à penser que s'il y a 100 fusées, cela devrait coûter moins de 100 calculs pour mettre à jour l'état?
Mon problème ici est que l'auteur présente un modèle de programmation «imparfait» mais ne présente aucun moyen de le «corriger». Peut-être que je trébuche sur l'analogie de la classe Rocket, mais j'aimerais vraiment comprendre le raisonnement derrière ce mensonge. Quelle est l'alternative?