Maison  >  Article  >  développement back-end  >  Comment éviter la duplication de code lors de l'implémentation de méthodes identiques sur des structures avec des champs partagés ?

Comment éviter la duplication de code lors de l'implémentation de méthodes identiques sur des structures avec des champs partagés ?

DDD
DDDoriginal
2024-10-27 02:21:30347parcourir

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

Bonnes pratiques pour utiliser une fonction commune dans des structures avec des champs identiques

Dans les scénarios où deux structures possèdent des champs identiques, il est souhaitable d'empêcher duplication de code lors de la définition de méthodes qui fonctionnent sur ces champs.

Type personnalisé en tant que récepteur de méthode

L'approche recommandée consiste à introduire un type personnalisé (par exemple, version) qui sert comme récepteur de méthode. Étant donné que tous les types personnalisés peuvent être utilisés comme récepteurs de méthodes, cette technique permet la création d'une méthode unique qui peut être appliquée à plusieurs structures.

Composition

Une fois la personnalisation type est défini, il peut être incorporé dans les structures à l’aide de la composition. Cela implique d'intégrer le type personnalisé dans les structures, créant essentiellement une structure imbriquée.

Exemple

Considérez l'extrait de code suivant :

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

Ici, le type Version sert de récepteur de méthode, et sa méthode PrintVersion est accessible à la fois par les structures Game et ERP en raison de leurs champs Version intégrés.

Utilisation

Le champ Version intégré peut être utilisé et modifié comme n'importe quel autre champ :

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

En employant cette approche, la répétition de code associée aux méthodes en double est éliminée tout en conservant la flexibilité et la sécurité des types.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn