Comment ajouter une méthode de sauvegarde à des structures différentes avec des champs partagés
Considérez le contexte suivant :
type ModelA struct { Guid string `orm:"pk"` FiledA string } type ModelB struct { Guid string `orm:"pk"` FiledB string }
Le besoin s'est fait sentir d'introduire une méthode Save() pour les deux structures (ModelA et ModelB). Bien qu'il soit possible de créer une structure de base commune et de l'intégrer dans ModelA et ModelB, cette approche n'est pas viable en raison des limitations de l'ORM.
Approche alternative : implémentation d'une interface
Désignez une interface commune pour enregistrer les données, telle que Savable, comme indiqué ci-dessous :
type Savable interface { Save() }
Implémentez la méthode Save() pour chaque structure, en vous assurant qu'elles satisfont à l'interface Savable :
func (a ModelA) Save() { // Save logic for ModelA } func (b ModelB) Save() { // Save logic for ModelB }
Avec cette structure en place, vous pouvez opérer sur des instances de l'une ou l'autre structure via l'interface Savable :
var i Savable i = SomeMethodThatRetunsMyModel() i.Save() SomeOthermMethodThatAcceptsASavableAndCallesSave(i)
Implémentation à l'aide de l'intégration
Alternativement, vous pouvez optez également pour une approche d'embedding en définissant un ModelC de base avec le champ commun (Guid) :
type ModelA struct { ModelC FiledA string } type ModelB struct { ModelC FiledB string } type ModelC struct { Guid string `orm:"pk"` } func (c ModelC) Save() error { // Save logic for ModelC return nil }
Notez cependant que cette méthode ne sauvegardera que les champs définis dans ModelC.
Considérations
Il est important de noter les limites des deux approches :
En fin de compte, la meilleure solution dépend des exigences spécifiques de votre application.
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!