2010-11-11 4 views

Répondre

7

Non, vous ne devez pas envoyer le fichier XML au constructeur, car vous couplez le modèle avec la logique déserilisante. Vous devez créer une classe qui gère la déserlisation pour vous et renvoyer une instance. Pourquoi cela est important peut-être pas clair. Mais imaginez à l'avenir que vous puissiez avoir les données provenant d'une base de données, vous ne voulez pas passer la connexion de base de données au constructeur, n'est-ce pas? Au lieu de cela, vous pouvez créer une classe différente qui utilise des bases de données pour générer une instance de votre classe.

Voici quelques bonne lecture: (ou ont setters publics)

http://en.wikipedia.org/wiki/Builder_pattern

http://en.wikipedia.org/wiki/Immutable_object

+0

Mais Si je crée une classe désérialiseur, la plupart de mes attributs de classe devrait devenir public. Merci. – poiuytrez

+0

Vous devriez viser à vous rendre immuable pour un meilleur design. Si vous avez une énorme liste de champs, pensez à utiliser un modèle de générateur. Enfin, si vous pouvez emballer les choses, pensez peut-être à utiliser des champs protégés pour pouvoir les définir directement. –

+0

Merci! Je pense que le modèle Builder est parfait pour moi. – poiuytrez

3

L'approche la plus simple serait de laisser XmlSerializer le faire pour vous. Décorez-le simplement (si nécessaire) afin qu'il sache comment mapper le fichier XML et appelez Désérialiser.

2

si vous recevez XML comme une chaîne qui nécessite l'analyse syntaxique spéciale, vous pouvez, je suppose, créer un gestionnaire/usine pour construire votre objet:

  var myObject = MyObjectCustomXmlSerializer.Deserialize(xmlString); 
Questions connexes