Ravioli-code - warum ein anti-pattern?
Kurzem stieß ich auf einen Begriff 'Gott-Objekt', die beschrieben wurde als "anti-pattern". Ich hatte gehört, der schlechte programmierpraktiken, aber ich hatte noch nie gehört, wie Sie beschrieben damit.
So ging ich aus der Wikipedia, um mehr zu erfahren, und ich fand, dass es ein anti-pattern genannt 'Ravioli code", die beschrieben wird als "gekennzeichnet durch eine Vielzahl kleiner und (im Idealfall) lose gekoppelte software-Komponenten."
Ich bin verwirrt - warum ist das eine schlechte Sache?
- wer hat gesagt, das war eine schlechte Praxis? Die lose Kopplung ist eine Gute Sache.
- Mein code ist nicht spröde, ist es "al dente" 🙂
- Ich glaube nicht, dass es eine schlechte Sache. Aber im wikipedia-Artikel über "Gott-Objekt" es ist aufgelistet, wie eine entgegengesetzte anti-pattern
- "Ravioli code" als ein anti-pattern sein würde, wo entkoppeln Sie alles auf die Spitze. Lassen Sie uns sagen, Sie möchten, um eine web-Seite, die HTML-Ausgänge und erstellen Sie ein JavaScript-Objekt zur Ausgabe jeder einzelnen HTML-tag (z.B.: objP, objBR, objHR), vielleicht haben Sie dann auch ein javascript-Objekt für häufige Wörter (objWordTHIS, objWordIS, objA) und vielleicht auch weniger gebräuchliche Wörter zu (objWordRidiculous, objWordIdea) dann schreibst du ein Programm das nennt die .displayMethod auf jedes dieser die Erstellung von "<p>Das ist eine Lächerliche Idee", es wäre sehr lose gekoppelt, wäre aber ein sehr schlechtes design.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Spaghhetti:
Ravioli:
Es Sie vergleicht. Es ist nicht zu sagen, es ist ein anti-pattern.
Aber ich Stimme zu. Der Artikel ist verwirrend. Das problem ist nicht mit ravioli Analogie, aber mit der wikipedia-Struktur selbst. Es beginnt aufrufen Spaghetti als eine schlechte Praxis ist, dann sagt Sie einige Beispiele und danach etwas darüber sagen, Ravioli-code.
EDIT: Sie verbessert den Artikel. Ist ein anti-pattern, da
Aufgelistet in der Seite der Spaghetti-code, aber das bedeutet nicht, dass es eine schlechte Sache. Es ist dort, weil dies ist ein relevanter Begriff und nicht wichtig genug, um seine eigene Seite.
Über die schlechte Seite, Googeln gibt einen Kommentar in http://developers.slashdot.org/comments.pl?sid=236721&cid=19330355:
Du musst beurteilen, ob das vernünftig ist :).
Ich würde sagen, es ist ziemlich offensichtlich, Ravioli-code und Lasagne-code sind beide abwertende Begriffe - bewusst platziert, zusammen mit Ihren Kolleginnen und pasta simile 'spaghetti-code' - und beide Begriffe beschreiben Reale Welt-anti-patterns. Einige code ist sehr aufwändig zu pflegen und sehr anfällig für Fehler, einfach, weil es gliedert sich in so viele einzelne sub-Prozesse - das ist ravioli-code. Einige code hat so viele Ebenen der Abstraktion, es wird sehr schwierig zu implementieren, ändern und/oder zu verstehen, auf welcher Ebene ein Fehler Auftritt - das ist der Lasagne-code. Die einzige praktische Weg, um eine änderung vornehmen zu Lasagne code ist oft zu einfach umgehen, und wie die Lagen und schreiben Sie den code einfach, dass der job nicht. Ich Pflege einige ravioli-code, aber im Allgemeinen sind solche code-leidet seine Faltung und nicht zu finden, weit verbreitet, und so gibt es nur wenige Beispiele dafür, dass wir alle mit vertraut sind. Durch Kontrast, Lasagne code ist überall im moment.
Ich mag zu denken, ich Schreibe keine pasta-code selbst, aber man kann zumindest folgt einer Reihe von spaghetti...
So ziemlich der einzige Grund "ravioli code" hat überlebt, als eine phrase ist, denn die Programmierer haben einen angeborenen Sinn für humor. Versuchen wie ich könnte, - und glauben Sie mir, ich habe versucht - es ist wirklich schwer zu kommen mit einem Beispiel eines Objekt-orientierten code, der sowohl (a) verpackt, so dass es war wirklich schwer zu navigieren, in der gleichen meta-Sinn, das "spaghetti-code" ist schwer zu navigieren, und (b) spiegelt ein häufiges anti-pattern in der Codierung der Praxis.
Ist das beste Beispiel für "ravioli code", die ich kann kommen mit ist eine Menge von Klassen, die eng verpackt, aber wo ist es wirklich schwer zu Graben aus werden, wo der Hauptstrom der Ausführung ist. Neuronales Netz-Anwendungen zeigen dieses, aber das ist sozusagen der Punkt. Einen eher banalen Beispiel wäre der UI-code, der ist sehr stark event-orientiert, aber wieder, es ist schwer, über Bord zu gehen mit, dass - wenn überhaupt etwas, die meisten UI-code nicht event-driven genug.
Wenn Sie eine dogmatische Regel, dass alle Klassen in allen Projekten müssen lose gekoppelt unabhängig von irgendeinem Grund, dann kann ich sehen, dass es viele potentielle Probleme.
Könnten Sie drehen Ihre Räder, die versuchen, zu völlig in Ordnung, die Anwendung mehr und mehr und mehr lose gekoppelt, ohne jemals tatsächlich hinzufügen einer beliebigen Wert zu.
Lassen Sie mich rasch hinzufügen, aber, dass ich denke, dass sollten wir alle das Ziel hin zu lose gekoppelten Klassen, Komponenten etc.
Ist es nicht unbedingt, oder? Der Wikipedia-Artikel nicht beschreiben, wie es zu schlecht. Eine Reihe von lose gekoppelten software-Komponenten, bei denen die Größe und Anzahl dieser Komponenten ist sinnvoll in Bezug auf die problem-Domäne, klingt ziemlich ideal für mich.
In der Tat, wenn man sich andere Definitionen von ravioli-code suchen, finden Sie beschrieben, wie die ideale software-design-pattern - ich immer noch lieber die Einschränkung, dass die Größe und Anzahl müssen angemessen sein.
Das problem ist, dass verschiedene Menschen verwenden den Begriff "ravioli code" zu bedeuten verschiedene Dinge.
Einer angemessenen Anzahl von relativ kleinen Komponenten ist gut. Ein riesiger Haufen von winzigen Komponenten mit keine offensichtliche Struktur insgesamt nicht so gut.
Lose gekoppelte Komponenten sind gut. Komponenten, die verstecken Ihre Abhängigkeiten, um zu sehen, die lose gekoppelt sind, nicht so gut.
Sehen-können der Beziehungen zwischen verschiedenen Komponenten, ist eigentlich eine gute Sache.
Meisten code-Basen, haben das umgekehrte problem, obwohl, so bewegt sich eher in Richtung Modularität ist in der Regel eine gute Sache. Ich erwarte, dass die meisten Leute noch nie gesehen haben "ravioli code" im schlechten Sinne. In der Praxis neigt dazu, zu sehen eher aus wie gehackte ravioli (was sollte ein Modul ist aufgeteilt auf mehrere "Module" -- nichts, was durchaus Sinn macht, auf Ihre eigene, aber nur in Kombination mit entsprechenden anderen teilen), oder wie ravioli gekocht, ohne genügend Wasser (so dass Sie am Ende mit einem riesigen Klecks "Module" alle hielten zusammen).
TODO: Schreiben Sie ein "Hello world" - Programm als ~100-Module, um zu demonstrieren, overmodularity.
TODO2: der Versuch, eine Brücke zu bauen von LKW-Ladungen von ravioli zu zeigen suboptimale strukturelle Merkmale.
Lesen Sie den Artikel, Spaghetti ist ein anti-pattern; aber Ravioli und Lasagne sind nicht anti-patterns.