Merci @ThonyF pour ton retour et le lien vers la documentation DTO de Vapor.
À vrai dire les DTO c’est simplement une couche qui représente les données qui vont être échangées sur le réseau pour que ça soit plus léger en données.
Par exemple la classe User qui représente les données (dans sa totalité) de la BDD :
final class User: Model, Content {
static let schema = "users"
@ID(key: .id)
var id: UUID?
@Field(key: "name")
var name: String
@Field(key: “age”)
var age: UInt8
@Field(key: "email")
var email: String
@Parent(key: "adress_id")
var adress: Adress
@Parent(key: "order_id")
var orders: [Order]
…
}
Sur certains affichages au niveau client, on souhaite juste obtenir le nom, l’âge et l’email. Dans ce cas on créer un DTO représentant cet écran.
struct UserLightInformation: Content {
var name: String
var age: UInt8
var email: String
}
Avec cette structure DTO (UserLightInformation), on aura juste les informations nécessaires à l’affichage et non la totalité des données de la classe User qui ne serviront pas tous. Cela rend les données beaucoup plus légères sur le réseau.
L’inconvénient de cette méthode est que cela pourrait prendre beaucoup de temps à mapper dans un sens ou dans l’autre les entités (User) et les DTO (UserLightInformation) et à créer des DTO pour toutes les entités.
C’est pour cela que j’ai demandé s’il n’y avait pas une technique différente en Swift pour y remédier.