Quelle est la différence entre un objet de modèle MVC, un objet de domaine et un DTO ?
Voici ce que j'ai compris :
Objet modèle MVC :
Modélise les données à afficher par une vue correspondante. Il peut ne pas correspondre directement à un objet de domaine, c'est-à-dire qu'il peut inclure des données provenant d'un ou de plusieurs objets de domaine.
- Côté client
- Peut contenir une logique commerciale. Par exemple, des validations, des propriétés calculées, etc.
- Pas de méthodes liées à la persistance
Objet du domaine :
Un objet qui modélise un objet du monde réel dans le domaine du problème, comme une réservation, un client, une commande, etc. Utilisé pour conserver les données.
- Côté serveur
- Pas de logique d'entreprise
DTO (Data Transfer Object) :
Objet utilisé pour transférer des données entre les couches lorsque celles-ci se trouvent dans des processus distincts, par exemple d'une base de données à une application client. Il permet d'effectuer une seule transaction sur le câble plutôt que plusieurs appels lors de l'obtention de données correspondant à plusieurs objets de domaine. Un DTO ne contient que des données et des méthodes d'accès, sans aucune logique. Les données concernent une transaction particulière de la base de données et peuvent donc correspondre directement ou non à un objet de domaine, car elles peuvent inclure des données provenant d'un ou de plusieurs objets de domaine.
- Utilisé à la fois du côté du serveur et du côté du client, car il est transmis entre les couches.
- Pas de logique d'entreprise
- Pas de méthodes liées à la persistance
Voici donc les questions qui se posent :
-
La compréhension ci-dessus est-elle correcte ? Ai-je oublié des points essentiels ?
-
Existe-t-il des raisons de ne pas utiliser les objets du domaine comme modèle MVC, en supposant que les objets du modèle ne requièrent pas de logique commerciale supplémentaire ?
-
Existe-t-il des raisons de ne pas utiliser les DTO comme modèle MVC, en supposant que les objets du modèle ne nécessitent pas de logique métier supplémentaire ?