Ce decission dépend de l'utilisation de vous WCF service:
- Service interne consommée par vous propres systèmes .NET, qui partagent les même modèle de domaine.
- Service externe consommé par différentes plates-formes, qui ne partagent pas le même modèle de domaine.
Cas 1.
sérialisation - est le processus de l'état persistant de l'objet. L'état de l'objet en C# est représenté par ses champs de données.
Les propriétés de C# sont essentiellement des méthodes qui manipulent l'état de l'objet. Leur utilisation peut entraîner une désérialisation différente de l'état de l'objet, car l'ordre dans lequel les propriétés sont définies peut avoir un impact sur l'état final des données. D'autres facteurs peuvent entraîner une désérialisation incorrecte de l'état, par exemple si method (jeu de propriétés) repose sur un contexte qui change, comme DateTime actuel.
Vous pouvez dire quoi sur l'encapsulation? Je ne veux pas que mon objet soit dans un état invalide, et je dois faire des vérifications de validation, des vérifications d'intégrité de graphique d'objet, etc. Oui, vous devriez, ainsi nous mettons les attributs de DataMember sur des accessoires? Le problème ici est que beaucoup de personnes mélangent deux choses différentes, DTO (objet de transfert de données, contrat WCF) avec l'entité de domaine. Ce dont vous avez besoin, c'est de vous assurer que les données que vous recevez sont exactement les mêmes que celles qui ont été envoyées, puis assurez-vous que vous pouvez construire une entité de domaine valide à partir de ces données. La meilleure façon d'y parvenir est d'utiliser des classes séparées pour les objets DTO et de construire l'entité de domaine à partir d'eux.
Mais la plupart des programmeurs sont paresseux, et ils aiment décorer simplement l'entité de domaine avec les attributs DataMemeber. Dans ce cas, la décision Champ ou Prop dépend de votre logique de validation, si votre logique de validation est enterrée dans les méthodes Set, vous devrez utiliser Props, si elle est externe, vous devrez utiliser Fields et valider votre entité de domaine après désialisation.
P.S. Je pense que les mêmes règles s'appliquent à tout processus de sérialisation, comme la persistance de la base de données.
Aussi, je voudrais mentionner que Silverlight ne peut pas sérialiser \ désérialiser des champs privés, parce que vous ne pouvez pas y accéder de l'extérieur en utilisant la réflexion, et vous devrez les rendre privés et utiliser InternalsVisibleToAttribute.
Case 2.
Il est difficile une. L'objectif principal ici est l'interopérabilité. Dans 99,9%, vous aurez des classes DTO séparées dans ce cas et probablement beaucoup de différentes versions pour supporter les anciens clients. Peu importe où vous placez les Attributs DataMembers, car vous utilisez les DTO. Je ne prendrai pas la peine d'expliquer ce scénario, parce que les développeurs qui travaillent sur un tel système à grande échelle sont généralement assez expérimentés, et ils ne prennent pas la peine de lire SO.
vous n'avez pas besoin de faire d'une variable privée un membre de données. –