7
votes

Injection de dépendance - Utilisation avec des objets de transfert de données (DTO)?

Considérez le code ci-dessous (qui a été simplifié). J'ai une classe de service qui renvoie une liste d'objets DTO spécifiques qui appliquent chacun leur propre interface spécifique. Dans le code actuel, ils sont rentrés par itération à travers un jeu de données car je travaille avec le code hérité.

questions:

  1. Comment créer / utilisons-t-on un DTO sans les nouveaux vers le haut ou l'utilisation du localisateur de service anti-motif? Il n'a pas fortement de sens de composer un objet DTO vide dans la racine de la composition et de l'injecter dans la classe de service via le constructeur, car j'utilise réellement la DTO comme variable temporaire de TRES en remplissant une liste.

  2. Dans le code, vous pouvez voir un exemple de moi se débrouiller dans le DTO. Mais cela ne ressent pas beaucoup mieux que si j'ai fait que les DTO ne mettent pas en œuvre des interfaces en premier lieu. Donc, ne devraient-ils pas implémenter des interfaces alors et donc, ne pas utiliser di avec DTO?


    xxx

2 commentaires

connexe: Stackoverflow.com/Questtions/4835046/...


Dupliquer avec des réponses intéressantes: Stackoverflow.com/Questtions/8135894/...


3 Réponses :


16
votes

Cela n'a pas beaucoup de sens pour moi d'utiliser des di pour DTO. J'utiliserais probablement le modèle d'usine pour obtenir DTO pour mes objets de modèle.

Les DTO n'ont pas besoin de leur cycle de vie géré par le conteneur; Je voudrais juste neuf eux. Ne pas trop ingénieur.


0 commentaires

8
votes

Je ne pense pas que les DTO devraient mettre en œuvre des interfaces, car elles ne sont pas susceptibles de mettre en œuvre un comportement qui changera.

Ils ne doivent pas non plus être injectés. Tous les objets ne devraient pas être. Je pense que c'est un appel approprié à la nouvelle: créez l'objet, utilisez-le, laissez-le sortir de la portée et être GC'D.


0 commentaires

1
votes

regarder automapper . Et je suis d'accord avec @duffymo, je n'utiliserais pas d'interfaces avec DTO's. Automapper est un objet basé sur la convention pour objet Mapper qui créera et renseignera votre DTO pour vous. Si rien d'autre, il vous sauvera beaucoup de taper. J'ai traversé l'exercice des routines de conversion d'écriture vers / de DTO avec des fautes de frappe associées. J'aimerais avoir trouvé un peu plus tôt automapper. Dans le cas de votre exemple (où j'ai nommé l'objet "de" objet de type ordre): xxx

ou à l'aide de linq xxx < / p>


1 commentaires

+1 bonne réponse. Vous devriez utiliser la prise en charge intégrée d'AM pour les tableaux de mappage, cependant, vous pouvez mapper.map (xs) . Pas sûr si un ilist est un) nécessaire b) soutenu Ootb de Suis, mais si vous avez utilisé TOLIST ferait le nécessaire