„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Wie vermeide ich Codeduplizierung bei der Implementierung identischer Methoden für Strukturen mit gemeinsam genutzten Feldern?

Wie vermeide ich Codeduplizierung bei der Implementierung identischer Methoden für Strukturen mit gemeinsam genutzten Feldern?

Veröffentlicht am 19.11.2024
Durchsuche:453

How to Avoid Code Duplication When Implementing Identical Methods on Structs with Shared Fields?

Best Practices für die Nutzung einer gemeinsamen Funktion über Strukturen hinweg mit identischen Feldern

In Szenarien, in denen zwei Strukturen identische Felder besitzen, ist es wünschenswert, dies zu verhindern Codeduplizierung beim Definieren von Methoden, die mit diesen Feldern arbeiten.

Benutzerdefinierter Typ als Methode Empfänger

Der empfohlene Ansatz besteht darin, einen benutzerdefinierten Typ (z. B. Version) einzuführen, der als Methodenempfänger dient. Da alle benutzerdefinierten Typen als Methodenempfänger verwendet werden können, ermöglicht diese Technik die Erstellung einer einzelnen Methode, die auf mehrere Strukturen angewendet werden kann.

Zusammensetzung

Sobald die benutzerdefinierte Ist der Typ definiert, kann er per Komposition in die Strukturen eingebunden werden. Dazu gehört das Einbetten des benutzerdefinierten Typs in die Strukturen, wodurch im Wesentlichen eine verschachtelte Struktur erstellt wird.

Beispiel

Betrachten Sie den folgenden Codeausschnitt:

type Version string

func (v Version) PrintVersion() {
    fmt.Println("Version is", v)
}

type Game struct {
    Name               string
    MultiplayerSupport bool
    Genre              string
    Version
}

type ERP struct {
    Name               string
    MRPSupport         bool
    SupportedDatabases []string
    Version
}

Hier dient der Versionstyp als Methodenempfänger, und auf seine PrintVersion-Methode kann sowohl von der Game- als auch von der ERP-Struktur aufgrund ihrer eingebetteten Versionsfelder zugegriffen werden.

Verwendung

Das eingebettete Versionsfeld kann wie jedes andere Feld verwendet und geändert werden:

main() {
    g := Game{
        "Fear Effect",
        false,
        "Action-Adventure",
        "1.0.0",
    }

    g.PrintVersion() // Version is 1.0.0

    e := ERP{
        "Logo",
        true,
        []string{"ms-sql"},
        "2.0.0",
    }

    e.PrintVersion() // Version is 2.0.0
}

Durch die Verwendung dieses Ansatzes wird die mit doppelten Methoden verbundene Codewiederholung eliminiert, während gleichzeitig Flexibilität und Typsicherheit gewahrt bleiben.

Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3