Dans votre application, vous rencontrez la nécessité d'implémenter une méthode Save() pour deux modèles, ModelA et modèle B. Malgré leurs différences, ils partagent un terrain commun, le Guid. Habituellement, une structure de base est créée pour contenir les champs communs et intégrée dans les modèles individuels. Cependant, cette approche pose un obstacle pour les ORM comme beego/orm.
Implémenter la méthode Save() avec une interface
Une solution efficace consiste à définir une interface, Enregistrable et implémentez-le dans ModelA et ModelB. Cela vous permet d'utiliser le type d'interface pour appeler la méthode Save(), quel que soit le modèle spécifique utilisé. Voici un exemple :
type Savable interface { Save() } func (a ModelA) Save() { // Save implementation for ModelA } func (b ModelB) Save() { // Save implementation for ModelB } // Example usage var i Savable i = SomeMethodThatRetunsMyModel() i.Save()
Intégration d'une structure commune
Si les types intégrés sont préférés, une approche alternative peut être adoptée. Créez une structure commune, ModelC, pour contenir le champ Guid. Ensuite, intégrez ModelC dans ModelA et ModelB. Définissez la méthode Save() dans ModelC, fournissant ainsi la fonctionnalité partagée entre les deux modèles.
type ModelC struct { Guid string `orm:"pk"` } func (c ModelC) Save() error { // Common Save implementation return nil } type ModelA struct { ModelC FiledA string } type ModelB struct { ModelC FiledB string }
Il est important de noter que cette approche d'intégration n'inclura aucun champ dans l'instruction d'insertion de l'ORM qui n'est pas défini dans ModèleC. Ainsi, des références directes aux méthodes ModelC peuvent être nécessaires si des champs non courants doivent être explicitement manipulés.
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!