2009-11-03 20 views
3

Lors de la création d'une solution à plusieurs niveaux, je ne souhaite pas exposer mes objets métier, mais utiliser des objets DTO à la place. De l'autre côté, je ne veux pas définir deux fois les objets et écrire du code-copie tout le temps.Les POCO devraient-ils être dérivés des DTO ou mieux non?

Maintenant mon idée serait d'écrire des DTO qui contiennent tous les champs et propriétés nécessaires, mais pas de logique (état seulement).

Ensuite, je dériverais mes objets métier de ces DTO, en les étendant avec ma logique métier, en travaillant sur les propriétés des classes de base DTO. Ces objets seraient également les objets persistés dans l'ORM utilisé (NHibernate). Avec cette approche, du côté serveur, je pouvais travailler sur les objets métier et les transmettre directement au client (ils sont dérivés, donc coulissables). Je ne serais pas obligé d'exposer ma logique métier de cette façon et économiser beaucoup de code.

Pensez-vous que cette approche est judicieuse?

Cordialement,

Sebastian

+0

Comment allez-vous augmenter le coût de votre objet métier sans copier-copier lorsque vous obtenez un DTO d'un client? –

Répondre

6

Vous voudrez peut-être considérer les points suivants:.

» ..., parce garder le DTO pas au courant des objets de domaine vous permet de réutiliser DTO dans différents contextes De même, vous ne voulez pas les objets de domaine à savoir sur le DTO parce que cela peut signifier que changer le DTO exigerait de changer le code dans le domaine logique, qui serait le annonce d'un cauchemar d'entretien .

La meilleure solution consiste à utiliser le modèle d'assembleur , qui crée des objets DTO à partir d'objets métier et vice versa. Assembleur est une instance spécialisée du Mapper modèle également mentionné dans modèles d'entreprise Architecture d'application .... »

de Pattern and Practice: Data Transfer Object

En outre, je n'ai pas utilisé par moi-même, mais vous peut vouloir vérifier AutoMapper aussi bien.

+0

+1 pour "changer le DTO nécessiterait de changer le code dans la logique du domaine" –

+0

FWIW, AutoMapper est plutôt bon. – Gavin

1

me semble raisonnable. Dans Linq to SQL, les objets métier sont dérivés des objets DTO par l'utilisation de classes partielles.

0

« 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