Heim  >  Artikel  >  Backend-Entwicklung  >  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?

DDD
DDDOriginal
2024-10-27 02:21:30347Durchsuche

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 Methodenempfänger

Der empfohlene Ansatz besteht darin, einen benutzerdefinierten Typ (z. B. Version) einzuführen, der dient als Methodenempfänger. 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

Einmal 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:

<code class="go">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
}</code>

Hier dient der Versionstyp als Methodenempfänger, und auf seine PrintVersion-Methode können sowohl die Game- als auch die ERP-Strukturen aufgrund ihrer eingebetteten Versionsfelder zugreifen.

Verwendung

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

<code class="go">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
}</code>

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

Das obige ist der detaillierte Inhalt vonWie vermeide ich Codeduplizierung bei der Implementierung identischer Methoden für Strukturen mit gemeinsam genutzten Feldern?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn