Otd: les meilleures pratiques
Je pense utiliser des Otd au lieu de les passer autour de mon domaine d'objets. J'ai lu plusieurs posts ici comme ailleurs, et je sais qu'il existe plusieurs approches pour obtenir ce fait.
Si je n'ai que environ 10 classes de domaine dans tous les, et considérant que je veux utiliser Otd plutôt que des objets du domaine de la consommation dans mes Vues de WPF (front end), ce qui est l'approche recommandée.
Je pense que l'utilisation d'outils comme automapper etc peut-être trop pour ma situation. Donc, je suis à la pensée de l'écriture de mon custom mappeur de classe qui ont des méthodes pour la conversion d'un type de domaine à un DTO type.
Quelle est la meilleure façon de le faire, il n'existe aucun échantillon pour obtenir de moi a commencé à le faire?
Deuxième question: Lors de l'écriture de ces méthodes qui permettront de créer des Otd, comment dois-je traiter avec la mise en place de toutes les données, en particulier lorsque le type de domaine a des références à d'autres objets de domaine? Dois-je écrire des propriétés équivalentes dans la DTO pour la cartographie de ces refernece types dans le domaine de la classe?
Demandez si je n'ai pas mis ma deuxième question dans les mots appropriés. Mais je pense que vous comprenez ce que j'essaie de demander.
Troisième question: Lors de l'écriture des Otd, devrais-je écrire plusieurs Otd, chacun contenant des données partielles pour un modèle de domaine, de sorte que chacune d'elle peut être utilisée pour répondre à un point de Vue spécifique des besoins, ou si la DTO avoir toutes les données qui sont là dans la classe de modèle.
- Être prêt à écrire aussi de multiples spécifiques des Objets de Transfert de Données pour Service Méthodes, non seulement pour les Modèles de Domaine spécifiques.
Vous devez vous connecter pour publier un commentaire.
J'ai lu quelques posts ici sur DTO et il me semble que beaucoup de gens assimilent à ce que je considère comme un ViewModel. Un DTO c'est ça, l'Objet de Transfert de Données - c'est ce qui est transmis sur le réseau. Donc j'ai un site web et des services, seuls les services auront accès à du domaine réel/objets de l'entité, et le retour DTO est. Ceux-ci peuvent carte 1:1, mais estiment que les DTO est peut être rempli à partir d'un autre service de l'appel, une requête de base de données, la lecture d'un config - quoi que ce soit.
Après cela, le site web peut alors prendre ces DTO et ajoutez-les à un ViewModel, ou de les convertir en un seul. Que ViewModel peut contenir de nombreux types différents de DTO est. Un exemple simple serait un gestionnaire de tâches - le ViewModel contient à la fois l'objet de tâche que vous modifiez, ainsi qu'un groupe de Dto.Les objets utilisateur que la tâche peut être assignée à.
Garder à l'esprit que les services de retourner DTO est peut-être utilisé par un site web, et peut-être une tablette ou d'un téléphone application. Ces applications ont différents points de vue pour profiter de leurs écrans et donc le Viewmodel serait différent, mais la DTO de l'restera la même.
En tout cas, j'adore ces types de discussions, donc n'importe qui s'il vous plaît laissez-moi savoir ce que vous en pensez.
Matt
Je suis un peu en utilisant des Otd dans un projet. J'ai tendance à faire de l'Otd pour montrer seulement les données dont j'ai besoin pour une vue spécifiée. J'ai récupérer toutes les données affichées dans la vue de mes données d'accès de la classe. Par exemple, j'ai peut-être un objet Commande qui fait référence à un Client de l'objet:
Ensuite dans mon OrderListDTO j'ai peut-être quelque chose comme:
Quels sont les champs que je veux montrer à mon avis. Je récupère tous ces champs dans ma Base de données de code d'accès, donc je ne pas avoir à s'embêter avec de l'entité associations, à mon avis, un contrôleur ou d'un code.
Je viens de projet avec
spring-jdbc
et y sont utilisés DAO couche. Quelques fois les entités existantes ne couvrent pas toutes les données possibles à partir de DB. J'ai donc commencer à utiliser DTO.En appliquant les " 70 structure de programmation de la règle que j'ai mis tous les Dto en colis séparé:
Maintenant, je repenser et à décider de mettre tous les DTO que les classes internes sur les interfaces DAO pour des résultats qui n'ont pas les réutiliser. Donc, interface DAO ressembler à:
Je pense que la détention de données liées ensemble (personnalisé DTO avec interface DAO) dont le code est mieux pour
PageUp
/PageDown
.Meilleure Façon de développer les Dto
La façon de commencer à développer des Otd est de comprendre que leur seul but est de transférer le sous-ensemble des données de votre entreprise entités à différents clients(peut-être de l'INTERFACE utilisateur, ou d'un service externe). Compte tenu de cette compréhension, vous pouvez créer séparer les paquets pour chaque client...et d'écrire votre DTO classes. Pour la cartographie, vous pouvez écrire votre propre mappeur de définir les interfaces pour être transmis à l'usine de la création de DTO les objets sur la base des données de l'entité pour laquelle la DTO est en cours de création sera extrait. Vous pouvez également définir des annotations pour être placé sur votre champs d'entité mais personnellement, vu le nombre d'annotations utilisé, je préfère l'interface façon. La principale chose à noter à propos de Otd, c'est qu'ils sont aussi des cours et des données entre les Dto doivent être réutilisés, en d'autres mots, même s'il peut sembler tentant de créer des Otd pour chaque cas d'utilisation d'essayer de réutiliser les Dto pour la réduire au minimum.
Prise en main
Concernant la prise en main comme indiqué ci-dessus le seul but de la DTO est de donner au client les données dont il a besoin....si vous garder à l'esprit que vous pourriez tout simplement les données dans la dto à l'aide de setters...ou de définir une usine qui crée un DTO d'une Entité basée sur une interface.....
Concernant votre troisième question, est-ce comme cela est requis par votre client 🙂
Je vais supposer que votre modèle de domaine objets ont une clé primaire ID qui peuvent correspondre à l'ID de la base de données ou un magasin, ils sont venus.
Si ce qui précède est vrai, alors votre DTO permettra de surmonter type referecning à d'autres DTO est comme votre domaine d'objets, sous la forme d'une clé étrangère ID. Donc un OrderLine.OrderHeader relation sur le domaine de l'objet, sera OrderLine.OrderHeaderId cin la DTO.
Espère que ça aide.
Puis-je vous demander pourquoi vous avez choisi d'utiliser DTO au lieu de votre domaine riche en objets dans la vue?
Nous savons tous ce que
Dtos
sont (probablement).Mais l'important c'est d'en abuser Otd ou pas.
De transférer les données à l'aide de
Dtos
entre "local" des services est une bonne pratique, mais ont une surcharge énorme sur votre équipe de développeurs.Il y a quelques faits:
Daos
). Si voustoujours besoin d'Otd pour transferig des données vers/à partir de la télécommande (le processus).
Dtos
pour transmettre les données entre les services est facultatif. Si vous n'avez pas l'intention de diviser votre projet de microservices il n'est pas nécessaire de le faire. Il sera juste un rétroprojecteur pour vous.Vous avez besoin pour lire cet article https://martinfowler.com/bliki/LocalDTO.html
Question 1: Si la DTO vous avez besoin de transfert sont juste un simple sous-ensemble de votre domaine d'objet, vous pouvez utiliser un modelmapper pour éviter de remplir votre base de code avec la logique de moins de cartographie. Mais si vous avez besoin d'appliquer un peu de logique/de conversion de votre mapping, puis le faire vous-même.
Question 2: est-Vous pouvez et devriez probablement créer un DTO pour chaque domaine de l'objet que vous avez sur votre principale DTO. Un DTO peut avoir plusieurs DTO l'intérieur de celui-ci, un pour chaque domaine objet dont vous avez besoin à la carte. Et pour la carte ceux que vous pourriez faire vous-même ou même utiliser certains modelmapper.
Question 3: Ne pas exposer à tous de votre nom de domaine si votre vue n'a pas besoin de. Aussi, vous n'avez pas besoin de créer un DTO pour chaque vue, essayez de créer DTO est que d'exposer ce qui doit être exposées et peuvent être réutilisés pour éviter d'avoir des multiples DTO qui partagent un grand nombre d'informations. Mais surtout dépendre sur les besoins de votre application.
Si vous avez besoin de précisions, il suffit de demander.