Si les propriétés dans l'objet de transfert de données étendent les clés étrangères ou exposent simplement leurs clés principales

StackOverflow https://stackoverflow.com/questions/5392093

Question

J'ai un EmployeedTo qui reprend un enregistrement des employés dans la base de données. La table des employés a une relation avec un département et une relation de 1 à plusieurs avec l'autorisation.

Dans mes entités, celles-ci sont représentées comme une propriété de département entièrement élargie et une liste d'objets d'autorisation entièrement étendus.

La question est de savoir si le DTO a une propriété de département pleinement élargie d'un départementid? Le DTO devrait-il avoir une liste des propriétés d'autorisation entièrement élargies de la liste de permissionID?

Était-ce utile?

La solution

Comme tout dans la conception, cela dépend de vos besoins.

  • Si vous avez besoin de voir et de lier fréquemment les propriétés de l'enfant et que vous souhaitez faciliter les développeurs pour utiliser vos DTO, vous voudrez peut-être que des méthodes d'usine explicites vous donnent des propriétés enfants entièrement élargies.
  • Si vous voulez une simplicité de code, n'élargissez pas les propriétés des clés étrangères et laissez simplement les développeurs obtenir l'objet enfant / les collections qu'ils souhaitent par clé selon les besoins.

Vous pouvez rencontrer des problèmes de récursivité; Développez-vous également toutes les propriétés étrangères de l'objet du département? Et s'il y a une référence à un autre employée dans une sous-classe de département?

Le cadre d'entité de Microsoft, ainsi que d'autres cadres d'objets commerciaux populaires, gèrent ce concept par chargement paresseux - récupèrent la propriété enfant élargie complète si elle est demandée par le code. Il s'agit probablement de la solution la plus flexible, mais a un peu de surcharge / décalage car les propriétés enfants ne peuvent pas être récupérées dans le même appel de base de données que l'objet parent. Ce ne sont bien sûr pas purement DTOS.

Autres conseils

Oui et Non, cela dépend de l'appel et si vous auriez besoin de toutes les propriétés supplémentaires dans chaque appel. Cela peut également dépendre de la technologie ORM que vous utilisez qui peut implémenter un chargement paresseux et peut affecter votre décision (si vous passez des objets entités droites bien que ce soit non recommandé).

Il est courant de créer un cas DTO contenant toutes les propriétés nécessaires et un ou plusieurs objets DTO qui exposent plus de fonctionnalités et sont utilisés d'autres méthodes. Par exemple, j'ai un BasicUser classe qui ne contient que UserName et DisplayName et j'ai User qui contient plus, y compris Permissions et héritage De `BasicUser.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top