web-dev-qa-db-fra.com

Quelle est la différence entre un objet modèle MVC, un objet domaine et un DTO

Quelle est la différence entre un objet modèle MVC, un objet domaine et un DTO?

Ma compréhension est:

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 d'un ou plusieurs objets de domaine.

  1. Côté client
  2. Peut contenir une logique métier. Par exemple. validations, propriétés calculées, etc.
  3. Aucune méthode liée à la persistance

Objet de domaine:

Un objet qui modélise un objet du monde réel dans le domaine problématique comme Réservation, Client, Commande, etc. Utilisé pour conserver les données.

  1. Du côté serveur
  2. Pas de logique métier

DTO (Data Transfer Object):

Un objet utilisé pour transférer des données entre les couches lorsque les couches sont dans des processus distincts, par exemple d'une base de données vers une application cliente. Permet une seule transaction sur le câble plutôt que plusieurs appels lors de la récupération des données correspondant à plusieurs objets de domaine. Un DTO contient uniquement des données et des méthodes d'accesseur et aucune logique n'est présente. Les données sont destinées à une transaction de base de données particulière, de sorte qu'elles peuvent ou non être directement mappées à un objet de domaine car elles peuvent inclure des données provenant d'un ou plusieurs objets de domaine.

  1. Utilisé à la fois côté serveur et côté client lors de son passage entre les couches
  2. Pas de logique métier
  3. Aucune méthode liée à la persistance

Donc, les questions:

  1. La compréhension ci-dessus est-elle correcte? Suis-je en train de manquer certains points clés?

  2. Y a-t-il des raisons de ne pas utiliser les objets de domaine comme modèle MVC en supposant que les objets de modèle ne nécessitent pas de logique métier supplémentaire?

  3. Y a-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?

62
Timothy Mowlem

Les objets de domaine et de modèle sont essentiellement les mêmes et peuvent contenir une logique métier. Selon l'implémentation, les objets domaine et DTO peuvent être équivalents si vous supprimez la logique métier du modèle dans une classe de service.

Souvent, une variante clé du DTO est le modèle de vue, qui est utilisé uniquement pour transférer des données entre le modèle de domaine et la vue, bien que souvent un modèle de vue puisse contenir une logique, bien qu'il s'agisse d'une logique d'interface utilisateur pure.

16
ProfK

Le domaine et le DTO peuvent également être vos objets "modèle" - vous pouvez avoir une vue pour restituer les détails de l'objet de domaine "client".

Un objet de domaine peut avoir une logique métier pour appliquer les propriétés de l'entité de domaine. la validation en est un exemple. L'objet de domaine en lui-même ne contient pas de méthodes liées à la persistance, mais il peut avoir des métadonnées (comme des annotations) pour prendre en charge la persistance

le modèle de programmation POJO permet d'utiliser le même objet que votre domaine, DTO et objets de modèle - essentiellement, vous ne serez pas implémenté d'interfaces étrangères qui ne s'appliqueront qu'à une couche mais ne s'appliqueront pas à d'autres.

8
kartheek
A DTO = is an object that carries data between processes.

Mais la partie la plus intéressante est que, il n'a aucun comportement sauf pour le stockage et la récupération de ses propres données !!!

Rester fidèle à la méthodologie MVC ...

Domain = subject of your entire application.

Model = contains the (programming languages objects : EX: C# objects) to make up the universe of your application.

Ils peuvent évidemment avoir un comportement et des propriétés (voir différence avec DTO).

Souvent, une application (légère) peut avoir un modèle - cas dans lequel votre modèle est exactement votre domaine. Un autre modèle peut être, un type d'objet totalement différent, qui en traite un autre. Les deux, dans ce cas, font partie de votre domaine et sont nommés "modèles de domaine - objets".

Espérons que cette réponse soit exhaustive et que tout soit clair pour vous!

3
Iulian Radulescu

Toute définition de la plupart des objets est différente selon le lieu d'utilisation des objets:

Model: est une définition générale pour utiliser objet dans client ou serveur.

  1. Model View: Est un objet utilisé dans client la plupart du temps.
  2. Domain Object: Est un objet utilisant dans server et transfering data to the database.
  3. Data Transfer Object(DTO): est un objet qui transfère des données d'un objet à un autre objet, spécialement pour obtenir des données dans API Call (par exemple: dans api GET Méthode appel pour obtenir des données vous ne devez pas donner de modèles de base de données au client, à cet effet vous utilisez dto).

Remarque: the definitions are true most of the time Mais dans certaines situations, ce n'est pas pratique.

1
Sina Lotfi

1) Non, c'est une définition de ViewModel. L'objet modèle MVC et l'objet domaine sont tous deux identiques.
2) Les modèles de domaine (objets) sont toujours présents, la logique métier est facultative
3) S'il n'y a pas de logique métier dans l'objet de domaine, il devient automatiquement DTO.

1
palash140

Ma compréhension (en bref) est la suivante:

(MVC) Objet modèle:

  • représenter certaines choses dans un certain contexte d'utilisation, par exemple. PersonEditModel, PersonViewModel ou simplement PersonModel
  • n'a pas de logique métier
  • peut faire l'objet d'une logique de validation, etc.
  • utilisé pour fournir des données d'une couche d'application à une autre, par exemple. Contrôleur MVC <-> Vue MVC

Objet de domaine:

  • représente un objet métier (objet du monde réel dans le domaine problématique)
  • a une logique métier
  • ne pas autoriser l'état d'objet invalide, a des méthodes pour changer correctement l'état de l'objet
  • utilisé pour encapsuler la logique métier qui lui est liée
  • ne doivent pas être utilisés pour conserver les données (ou même ne devraient pas)

DTO (Data Transfer Object):

  • similaire à l'objet modèle mais doit avoir une structure plate
  • uniquement les propriétés/champs de type simple (chaînes, nombres, dates, booléens)
  • utilisé pour transférer des données au-delà des limites de l'application, par exemple. entre le serveur Web et le navigateur Web
1
owerkop