Raviolis code - pourquoi un anti-modèle? [fermé]
je suis récemment tombé sur un terme 'Dieu de l'objet "qui a été décrit comme un "anti-modèle". J'avais entendu parler de mauvaises pratiques de codage, mais je n'avais jamais entendu les décrire ainsi.
alors je suis allé sur Wikipedia pour en savoir plus, et j'ai trouvé qu'il y a un anti-pattern appelé 'code Ravioli' qui est décrit comme étant "caractérisé par un certain nombre de petites composantes logicielles (idéalement) à couplage lâche."
je suis perplexe, pourquoi est-ce une mauvaise chose?
8 réponses
Spaghhetti:
le code Spaghetti est un péjoratif terme pour le code source
Raviolis:
le code Ravioli est un type d'ordinateur la structure du programme, caractérisée par nombre de petites et (idéalement) composants logiciels à couplage lâche. Le terme est en comparaison avec code spaghetti, programme de comparaison la structure de pâtes;
il les compare. Il n'est pas dit c'est un anti-modèle.
mais je suis d'accord. L'article est confus. Le problème n'est pas avec l'analogie de ravioli mais avec la structure d'article de wikipedia elle-même. Il commence à appeler Spaghetti comme une mauvaise pratique, puis dit quelques exemples et après que dire quelque chose sur le code Ravioli.
EDIT: ils ont amélioré l'article. Est un anti-modèle, car
bien que généralement souhaitable du point de vue du couplage et de la cohésion, une séparation trop zélée et l'encapsulation du code peut gonfler les piles d'appels et rendre plus difficile la navigation dans le code à des fins de maintenance.
elle est listée dans la page de code Spaghetti mais cela ne veut pas dire que c'est une mauvaise chose. Il est là parce que c'est un terme pertinent et pas assez importante pour avoir sa propre page.
en ce qui concerne le mauvais côté de celui-ci, Googling donne un commentaire dans http://developers.slashdot.org/comments.pl?sid=236721&cid=19330355:
le problème est qu'il tend à conduire à des fonctions (méthodes, etc.) sans véritable cohérence, et il laisse souvent le code de mettre en œuvre même quelque chose assez simple dispersé sur un très grand nombre de fonctions. Quiconque doit maintenir le code doit comprendre comment tous les appels entre tous les bits fonctionnent, recréant presque toute la méchanceté du Code Spaghetti sauf avec des appels de fonction au lieu de GOTO. ...
il faut juger si c'est raisonnable :).
je dirais qu'il est assez évident que le code des raviolis et le code des lasagnes sont deux termes péjoratifs-étant intentionnellement placés à côté de leurs semblables de pâtes Simil 'code spaghetti' - et les deux termes décrivent le monde réel anti-patterns. Certains codes prennent beaucoup de temps à maintenir et sont très sujets à l'échec simplement parce qu'ils sont décomposés en tant de sous-processus distincts - c'est-à-dire le code ravioli. Certains codes ont tellement de couches d'abstraction qu'il devient très difficile d'y apporter une modification. et / ou comprendre à quel niveau un échec se produit - qui est le code lasagnes. La seule façon pratique de modifier le code lasagna est souvent de simplement contourner les couches et d'écrire le code simple qui fait le travail. Je dois maintenir un certain code ravioli, mais en général un tel code souffre de sa convolution et ne parvient pas à trouver un usage répandu, il y a donc peu d'exemples que nous connaissons tous. En revanche, le code des lasagnes est partout à l'heure actuelle. J'aime à penser que je n'ai pas Ecrivez n'importe quel code de pâtes moi-même, mais vous pouvez au moins suivre une chaîne de spaghettis...
à peu près la seule raison pour laquelle "code ravioli" a survécu comme une phrase est parce que les programmeurs ont un sens inné de l'humour. Essayez comme je pourrais - et croyez - moi, j'ai essayé-il est vraiment difficile de trouver un exemple de code orienté objet qui était à la fois (a) emballé de sorte qu'il était vraiment difficile de naviguer dans le même méta-sens que "code spaghetti" est difficile à naviguer, et (b) reflète un anti-modèle fréquent dans la pratique de codage.
le meilleur exemple de" code ravioli " I pouvez venir avec une multitude de classes, chaque étroitement emballés, mais où c'est vraiment difficile à creuser, où les principaux flux d'exécution à l'est. Les applications des réseaux neuronaux peuvent montrer ça, mais c'est un peu le but. Un exemple plus banal serait le code UI qui est très fortement axé sur les événements, mais encore une fois, il est difficile d'aller trop loin avec cela - si quoi que ce soit, la plupart des codes UI ne sont pas axés sur les événements assez.
si vous appliquez une règle dogmatique que toutes les classes dans tous les projets doivent être vaguement couplées quelle que soit la raison, alors je peux voir qu'il y a beaucoup de problèmes potentiels.
vous pourriez Tourner vos roues en essayant de faire une application parfaitement fine de plus en plus et plus librement couplé sans jamais réellement ajouter de valeur à elle.
permettez-moi de m'empresser d'ajouter, cependant, que je pense que nous devrions tous viser vers des classes, des composants, etc peu couplés
Ce n'est pas nécessairement, est-il? L'article de Wikipedia ne le décrit pas comme mauvais. Un certain nombre de composants logiciels à couplage lâche, où la taille et le nombre de ces composants est sensible par rapport au domaine de problème, semble assez idéal pour moi.
en fait, si vous cherchez d'autres définitions du code ravioli, vous trouverez qu'il décrit comme le modèle de conception de logiciel idéal - je préfère encore la mise en garde que la taille et le nombre doivent être appropriés.
le problème est que différentes personnes utilisent le terme "code ravioli" pour signifier différentes choses.
un nombre raisonnable de composants raisonnablement petits est bon. Un énorme tas de petits composants sans structure globale apparente n'est pas si bon.
les composants à couplage lâche sont bons. Les composants qui cachent leurs interdépendances, afin de regarder faiblement couplés sont pas si bon.
être capable de voir la relation entre les différents composants est en fait une bonne chose.
la plupart des bases de code ont le problème opposé cependant, donc se déplacer vers plus de modularité est généralement une bonne chose. Je suppose que la plupart des gens n'ont jamais vu "code ravioli" dans le mauvais sens. Dans la pratique, il a tendance à ressembler davantage à des raviolis hachés (où ce qui devrait être un module est divisé en plusieurs" modules " - aucun d'eux n'a de sens à eux seuls, mais seulement en combinaison avec leurs autres parties correspondantes), ou comme des raviolis cuits sans assez d'eau (donc vous vous retrouvez avec un énorme blob de "modules" tous collés ensemble).
TODO: Ecrire un programme" Hello world " en tant que ~100 modules pour démontrer une surmodularité.
TODO2: tenter de construire un pont à partir de camions de raviolis pour démontrer les caractéristiques structurales sous-optimales.
à la lecture de l'article, les spaghettis sont anti-motifs; mais les raviolis et les lasagnes ne sont pas anti-motifs.