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!