2009-07-10 6 views

Répondre

2

Une classe devrait généralement avoir un seul but (appelé principe de responsabilité unique). Ainsi, alors qu'un objet aura souvent des méthodes qui agissent sur ses propres données, vous devriez être prudent quant à ce que c'est. Dans le cas de la lecture de données dans une instance d'objet, cela mérite probablement une autre classe. Donc, si vous avez une classe A et que vous voulez obtenir des données de XML et instancier des instances de A, cela devrait être une classe distincte très probable. Quelque chose comme AXmlReader par exemple. Il pourrait alors mettre en œuvre une interface areader et vous pourriez avoir un ADBReader, etc.

1

Cela me semble une méthode de fabrication statique, à savoir quelque chose comme

public static SomeObject CreateSomeObjectFromDataReader (IDataReader queryResult) 
{ 
    // create SomeObject by populating the fields using the IDataReader 
} 

auquel cas, il doit appartenir à la class lui-même puisque son implémentation est spécifique à cette classe (et qu'il aurait accès à des setters privés de propriétés).

1

Je combinerais les réponses de geofflane et de jpoh, qui sont toutes les deux bonnes. Le principe de responsabilité unique est important, mais vous devez mettre en balance les avantages du partage des responsabilités et de l'abstraction avec les coûts de lisibilité et de maintenance du code. Avez-vous vraiment besoin de créer 4 nouvelles classes pour hydrater un objet à partir de XML?

Eh ... Je pencherais probablement pour une implémentation de modèle simple Factory Method, aussi bien.

Cela dépend de l'application de votre code, mais je peux avoir une classe SomeObjectFactory avec une méthode CreateSomeObject(XmlReader reader) au lieu de faire de cette classe la responsabilité de la classe SomeObject.

public class SomeObjectFactory 
{ 
    public static SomeObject CreateSomeObject(XmlReader reader) 
    { 
     //hydrate a new SomeObject 
    } 
} 

Bonne chance!

Questions connexes