Poços devrait être dérivé de DTO ou mieux ne pas?
-
13-09-2019 - |
Question
Lors de la création d'une solution de n-tier, je ne veux pas exposer mes objets métier, mais utilise DTO au lieu de cela. De l'autre côté, je ne veux pas définir doublement des objets et écrire copie code tout le temps.
Maintenant, mon idée serait d'écrire DTO qui contiennent tous les champs et les propriétés nécessaires, mais pas de logique (seul état).
Alors je tireraient mes objets d'affaires de ces DTO, les étendre avec ma logique métier, en travaillant sur les classes de base DTO propriétés. Ces objets seraient également les objets ont persisté dans le ORM utilisé (NHibernate).
Avec cette approche, sur le côté serveur que je pouvais travailler sur les objets métier et les transmettre directement au client (ils sont dérivés, donc vers le bas-coulable). Je ne serais pas obligé d'exposer ma logique d'affaires de cette façon et d'économiser beaucoup de code.
Pensez-vous que cette approche est raisonnable?
Cordialement,
Sebastian
La solution
Vous pouvez considérer les points suivants:
» ..., parce que en gardant le DTO pas au courant de la objets de domaine vous permet de réutiliser DTO dans des contextes différents. De même, vous ne voulez pas le domaine objets savoir sur le DTO parce que cela peut vouloir dire que changer le DTO il faudrait modifier le code dans la logique de domaine , ce qui conduirait à une cauchemar d'entretien.
La meilleure solution est d'utiliser le modèle de Assembleur , ce qui crée des objets DTO d'affaires et vice versa. Assembleur est une instance spécialisée du Mapper modèle également mentionné dans Modèles d'architecture d'applications d'entreprise .... "
Motif et pratique: transfert de données objet
En outre, je n'ai pas utilisé par moi-même, mais vous pouvez consulter AutoMapper comme bien.
Autres conseils
me semble raisonnable. Dans LINQ to SQL, les objets métier proviennent de la DTO de par l'utilisation des classes partielles.
« Je tireraient mes objets d'affaires de ces DTO » avoir à l'esprit que DTO peut être différente de BO ils peuvent contenir des propriétés de 2 ou 3 BO