J'essaie d'obtenir une réponse finale claire à une question qui m'a rendu fou pour une longue période.Y a-t-il un avantage à utiliser un DTO plutôt qu'une référence partagée aux Entités dans un assemblage commun?
Il est communément exprimé que BLL doit contenir Business Logic et Business Objects (BO) et avoir une référence à la couche DAL. Le DAL, d'autre part, ne peut pas avoir une référence à la BLL, donc il ne peut pas accepter les BO comme arguments, ou retourner les BO comme valeurs de retour.
La réponse la plus traditionnelle à ce problème consiste à:
a) Accepter des paramètres simples et retour (de préférence dactylographié) DataSets et DataTables pour renvoyer des données: espace de noms DAL { public class Contacts DataTable publics GetContacts () {...} public UpdateContacts (Contacts DataTable) {...}
b) La deuxième solution la plus recommandée consiste à définir des objets de transfert de données (DTO) temporaires et sérialisables (parfois appelés objets de valeur (VO))) qui n'ont que des champs et des propriétés, pas de méthodes, et ne sont utilisés que pour transférer brièvement les données remontent à la couche BLL, où il est utilisé pour peupler les nouveaux BO, à quel point ils sont ensuite mis au rebut.
c) Utilisez un troisième ensemble commun (par exemple appelé Entities.dll), qui définit les BO, et est référencé par les trois couches: l'interface utilisateur, BLL et DAL.
L'option a) prend le moins de travail à implémenter (pas besoin de construire un autre assemblage), d'où la raison souvent proposée, mais les DataTables ont un câblage supplémentaire qui n'est pas nécessaire uniquement pour les opérations simples.
Pourtant, il est très peu claire, à laquelle de b) ou c) est mieux ...
Je vois b) offert parfois, et presque jamais c), même si c) semble être le plus facile des deux .
Qu'est-ce qui me manque? Pourquoi c) est-il si rarement proposé, même s'il semble logiquement le plus facile, et pourquoi a) est-il offert quand il n'est clairement pas adapté à tous les scénarios (par exemple, le retour d'objets uniques)?
Merci!
HI Jonathan: le premier lien nécessite une autorisation En ce qui concerne le second lien auquel vous faisiez référence - l'exemple Interfaces ou Data Services? –
Désolé, j'ai ajouté des permissions maintenant vous devriez donc pouvoir le télécharger via le lien a bove. Il s'appelle "DDD et WCF - Serializing Entities". –
Salut Jonathan: Merci pour les liens. Conclusions: a) DTO peut être sérialisé/désérialisé au même objet, si les deux tiers ont ref au même BO/assemblage BEntities: DAL <- BO n ° 1 v (en utilisant WCF) BLL <- BO # 2 ie: externe BO.dll résout la plupart des problèmes. b) Pourquoi préférer les DataSets typés aux DTO personnalisés? –