Wie erkennt man, dass der Code überstrapaziert ist?

9

Was sollten die Maßnahmen sein, die verwendet werden sollten, um zu identifizieren, dass Code über abstrahiert und sehr schwer zu verstehen ist und was getan werden sollte, um Abstraktion zu reduzieren?

    
TalentTuner 15.09.2010, 07:47
quelle

4 Antworten

11

"Einfachheit über Komplexität, Komplexität über Komplexität"

Also - es ist ein Vorteil, etwas nur dann zu abstrahieren, wenn Sie Kompliziertheit in Komplexität "ausgleichen". Gründe dafür können variieren: bessere Modularität, bessere Kapselung etc.

Über Abstraktion zu identifizieren ist ein Henne-Ei-Problem. Um Abstraktion zu reduzieren, müssen Sie den tatsächlichen Grund hinter Codezeilen verstehen. Dazu gehört das Verstehen der Idee einer bestimmten Abstraktion selbst (im Gegensatz dazu, sie über die abstrahierte Ursache des Unverständnisses zu stellen). Und das ist nicht genug - Sie müssen eine bessere, einfachere Lösung kennen, um zu beweisen, dass es über abstrahiert ist.

Wenn Sie nach einem Werkzeug suchen, das es an Ihrer Stelle tun könnte - schauen Sie nicht mehr, nur der Verstand kann das zuverlässig beurteilen.

    
Arnis Lapsa 15.09.2010, 08:34
quelle
10

Ich werde eine Antwort geben, die viele Abstimmungen bekommen wird!

Wenn der Code in einer OO-Sprache geschrieben wird, ist er notwendigerweise stark überstrichen. Je reiner die Sprache, desto schlechter das Problem.

Abstraktion sollte mit großer Vorsicht angewendet werden. Verwenden Sie im Zweifelsfall immer konkrete Datenstrukturen. (Sie können später immer abstrahieren, das ist einfacher als De-Abstraktion:)

Sie müssen sehr sicher sein, dass Sie in Ihrem aktuellen Kontext die richtige Abstraktion haben, und Sie müssen sehr sicher sein, dass das Konzept den Test der Veränderung bestehen wird. Abstraktion hat einen hohen Preis in der Leistung des Codes und des Kodierers.

Einige schwache Tests für Über-Abstraktion: Wenn die Datenstruktur ein Produkttyp ist (Struktur in C) und der Programmierer für jedes Feld get und set-Methode geschrieben hat, haben sie absolut keine echte Abstraktion, deaktivierte Operatoren wie C-Inkrement, für keinen Zweck, und einfach nicht verstanden, dass die Struct-Feldnamen bereits die abstrakte Darstellung eines Produkts sind. Die Schnittstelle zu duplizieren und zu lambieren ist keine gute Idee.

Ein guter Test für den Produktfall ist, ob Dateninvarianten vorhanden sind, die beibehalten werden sollen. Zum Beispiel ist ein Paar von ganzen Zahlen, die eine rationale Zahl darstellen, fast ausreichend, es gibt wenig Bedarf für irgendeine Abstraktion, weil alle Paare gültig sind, außer wenn der Nenner Null ist. Aus Gründen der Performance kann man sich jedoch dafür entscheiden, eine Invariante beizubehalten, typischerweise muss der Nenner größer als Null sein und der Zähler und der Nenner sind relativ prim. Um die Invariante sicherzustellen, wird die Produktrepräsentation gekapselt: der Anfangswert, der durch einen Konstruktor geschützt wird, und Methoden, die darauf beschränkt sind, die Invariante zu erhalten.

Um Code zu beheben, empfehle ich diese Schritte:

  1. Dokumentieren Sie die Darstellungsinvarianten, die die Abstraktion verwaltet

  2. Entfernen Sie die Abstraktion (Methoden), wenn Sie keine starken Invarianten finden können

  3. Schreiben Sie Code mit der Methode neu, um direkt auf die Daten zuzugreifen.

Diese Prozedur funktioniert nur für eine Abstraktion auf niedriger Ebene, d. h. Abstraktion kleiner Werte nach Klassen.

Über Abstraktion auf einer höheren Ebene ist viel schwieriger zu handhaben. Im Idealfall würden Sie den Code immer wieder umgestalten und prüfen, ob er nach jedem Schritt weiter funktioniert. Dies wird jedoch schwierig sein, und manchmal ist eine größere Neufassung erforderlich als eine Verfeinerung. Es ist wahrscheinlich nicht wert, es sei denn, die Abstraktion ist so weit von der Basis entfernt, dass es nicht haltbar ist, sie aufrechtzuerhalten.

    
Yttrill 26.12.2011 00:18
quelle
2

Laden Sie Magento herunter und schauen Sie sich den Code an, lesen Sie einige Dokumente darüber und werfen Sie einen Blick auf deren ERD: Ссылка

Ich mache keine Witze, das ist Über-Abstraktion. Der Versuch, jedem zu gefallen und jede Basis zu bedecken, ist eine schreckliche Idee und macht das Leben für jeden extrem schwierig.

    
John Hunt 29.11.2012 12:01
quelle
1

Persönlich würde ich sagen: "Was ist das ideale Niveau der Abstraktion?" ist eine subjektive Frage.

Ich mag keinen Code, der für jede atomare Operation eine neue Zeile verwendet, aber ich mag auch nicht 10 verschachtelte Operationen innerhalb einer Zeile.

Ich mag die Verwendung von rekursiven Funktionen, aber ich schätze die Rekursion nicht nur wegen der Rekursion.

Ich mag Generika, aber ich mag (verschachtelte) generische Funktionen nicht, die z.B. Verwenden Sie für jeden spezifischen Typ, der erwartet wird, einen anderen Code ...

Es ist eine Frage der persönlichen Meinung und des gesunden Menschenverstandes. Beantwortet das deine Frage?

    
Martin Hennings 15.09.2010 08:09
quelle

Tags und Links