Aus dem Artikel:
Allgemeiner kann sich das Jojo-Problem auch auf jede Situation beziehen, in der eine Person ständig zwischen verschiedenen Informationsquellen wechseln muss, um ein Konzept zu verstehen.
Quellcode wird weitaus häufiger gelesen als geschrieben. Daher ist das Jojo-Problem, zwischen vielen Dateien wechseln zu müssen, ein Problem.
Allerdings nicht , das Jo-Jo - Problem fühlt sich viel mehr relevant , wenn sie mit tief voneinander abhängigen Module oder Klassen (die hin und her zwischen ihnen nennen) zu tun. Das ist ein Albtraum der besonderen Art, den es zu lesen gilt, und wahrscheinlich hatte der Geber des Jojo-Problems das im Sinn.
Aber - ja , es ist wichtig, zu viele Abstraktionsebenen zu vermeiden!
Alle nicht-trivialen Abstraktionen sind bis zu einem gewissen Grad undicht. - das Gesetz der undichten Abstraktionen.
Ich bin zum Beispiel nicht einverstanden mit der Annahme in der Antwort von mmmaaa, dass "Sie kein Jo-Jo benötigen, um die ZipCode-Klasse zu [(besuchen)], um die Address-Klasse zu verstehen". Ich habe die Erfahrung gemacht, dass Sie dies tun - zumindest die ersten Male, wenn Sie den Code lesen. Wie andere angemerkt haben, gibt es jedoch Zeiten, in denen eine ZipCode
Klasse angemessen ist.
YAGNI (Ya wird es nicht brauchen) ist ein besseres Muster, um Lasagne-Code (Code mit zu vielen Ebenen) zu vermeiden. Abstraktionen wie Typen und Klassen dienen dem Programmierer und sollten nicht verwendet werden, es sei denn, sie sind vorhanden eine Hilfe.
Ich persönlich möchte "Codezeilen speichern" (und natürlich die zugehörigen "Dateien / Module / Klassen speichern" usw.). Ich bin zuversichtlich, dass es einige gibt, die mir den Beinamen "primitiv besessen" geben würden - ich finde es wichtiger, Code zu haben, über den man leicht nachdenken kann, als sich um Etiketten, Muster und Anti-Muster zu kümmern. Die richtige Wahl, wann eine Funktion, ein Modul / eine Datei / eine Klasse oder eine Funktion an einem gemeinsamen Ort erstellt werden soll, ist sehr situationsabhängig. Ich strebe in etwa 3-100 Zeilenfunktionen, 80-500 Zeilendateien und "1, 2, n" für wiederverwendbaren Bibliothekscode an ( SLOC - ohne Kommentare oder Boilerplate; ich möchte in der Regel mindestens 1 zusätzliches SLOC-Minimum pro obligatorischer Zeile Kochplatte).
Die meisten positiven Muster sind von Entwicklern entstanden, die genau das taten, wann sie es brauchten . Es ist viel wichtiger zu lernen, wie man lesbaren Code schreibt, als zu versuchen, Muster anzuwenden, ohne dass das gleiche Problem zu lösen ist. Jeder gute Entwickler kann das Factory-Muster implementieren, ohne es zuvor gesehen zu haben, in dem seltenen Fall, dass es für sein Problem die richtige Lösung ist. Ich habe das Factory-Muster, das Beobachter-Muster und wahrscheinlich Hunderte davon verwendet, ohne ihren Namen zu kennen (dh gibt es ein "variables Zuweisungsmuster"?). Für ein unterhaltsames Experiment - sehen Sie, wie viele GoF-Muster in die JS- Sprache integriert sind - habe ich 2009 nach ca. 12-15 aufgehört zu zählen. Das Factory-Muster ist so einfach wie das Zurückgeben eines Objekts aus einem JS-Konstruktor - es ist nicht erforderlich eine WidgetFactory.
Also - ja , manchmal ZipCode
ist eine gute Klasse. Jedoch nicht , ist die Jo-Jo - Problem nicht unbedingt relevant.