Qu’est-ce que les DTO et pourquoi devriez-vous vous soucier?
Les DTO sont des objets simples qui existent à un usage: transfert de données entre les composants du système. Dans les applications Go, ils aident à créer une section propre entre vos modèles de données internes et les structures de données que vous exposez le monde extérieur.
Considérez les DTO comme des messagers spécialisés qui portent exactement ce dont vous avez besoin – plus. Ils sont particulièrement précieux lorsque:
- Vous devez masquer les champs sensibles aux réponses de l’API
- Vos modèles internes ne correspondent pas au format client en attente
- Vous souhaitez résoudre vos modèles de domaine à partir de contrats sur API
Plongeons dans quelle mesure les implémentez-les en Go.
Créez votre premier DTO dans Go
Commençons par le scénario général: systèmes de contrôle des utilisateurs. Voici à quoi peut ressembler notre modèle d’utilisateur interne:
package modelsimport "time"
type User struct {
ID uint `gorm:"primaryKey"`
Email string `gorm:"unique;not null"`
PasswordHash string `gorm:"not null"`
FirstName string
LastName string
IsAdmin bool `gorm:"default:false"`
CreatedAt time.Time
UpdatedAt time.Time
DeletedAt *time.Time
}
Ce modèle fonctionne très bien pour nos opérations de base de données, mais nous ne voulons pas exposer tous les clients de l’API. Par exemple, nous ne devons jamais envoyer votre mot de passe au client, et nous voulons peut-être combiner les prénoms et les noms de famille.
Voici comment nous pouvons créer des DTO pour ce modèle:
package dtoimport "time"
// UserResponse represents the user data sent to clients
type UserResponse struct {
ID uint `json:"id"`
Email string `json:"email"`
FullName string `json:"fullName"`
IsAdmin bool `json:"isAdmin,omitempty"`
CreatedAt time.Time `json:"createdAt"`
}
// UserCreate represents the data needed to create a new user
type UserCreate struct {
Email string `json:"email" binding:"required,email"`
Password string `json:"password" binding:"required,min=8"`
FirstName string `json:"firstName"`
LastName string `json:"lastName"`
}
// UserUpdate represents the data that can be updated
type UserUpdate struct {
Email *string `json:"email" binding:"omitempty,email"`
FirstName *string `json:"firstName"`
LastName *string `json:"lastName"`
}
Notez comment j’ai créé trois DTO différents pour différentes opérations. Il s’agit d’une pratique clé, adaptez vos DTOS à des cas d’utilisation spécifiques plutôt que de créer une structure de taille unique.
Game Center
Game News
Review Film
Rumus Matematika
Anime Batch
Berita Terkini
Berita Terkini
Berita Terkini
Berita Terkini
review anime

