Les fonctions qui agissent sur et objectent, par exemple pour le remplir à partir de xml, appartiennent à l'objet lui-même ou bien tout ce qui crée l'objet lui-même doit-il fonctionner?Propriété des fonctions agissant sur un objet
Répondre
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.
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).
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!
- 1. Fonctions Propriété Question
- 2. Propriété facultative sur un objet lié dans ASP.NET MVC
- 3. ASP classique "ExecuteGlobal" déclaration agissant différemment sur deux serveurs
- 4. Javascript agissant différemment sur différents hôtes
- 5. CSS agissant bizarre
- 6. Silverlight WCF service agissant étrange
- 7. AS3 MouseEvent localX agissant bizarre
- 8. Récupère toutes les fonctions définies pour un objet
- 9. stockage fonctions python non liées dans un objet de classe
- 10. Mettre un objet en session via une propriété dans ASP.NET
- 11. Comment puis-je vérifier dynamiquement un objet pour un sous-objet/propriété en javascript/jquery
- 12. Comment attribuer une propriété à un objet jQuery?
- 13. Un objet doit-il posséder une propriété dont le résultat est basé sur une logique métier?
- 14. Comment déterminer quand un contrôle PropertyGrid est sur le point de modifier la propriété d'un objet
- 15. Récupérer un objet par propriété dans les données de base
- 16. Comment puis-je mettre à jour la propriété managedBy sur un objet ordinateur dans Active Directory?
- 17. Comment créer un objet maquette basé sur une interface et définir une propriété en lecture seule?
- 18. La DataDource d'une BindingSource peut-elle être une propriété de et un objet sur le formulaire
- 19. Qt: ItemAt() de TableWidget agissant bizarrement
- 20. Propriété Visual Basic 6 par défaut pour les fonctions intégrées
- 21. Regarder des messages sur un objet dans le débogueur Xcode
- 22. hauteur dans IE 6 agissant bizarre
- 23. concaténer récursive a des fonctions javascript arguments
- 24. Trier la liste des objets par propriété sur l'objet associé
- 25. sténographie pour appeler une méthode sur un objet en F #
- 26. Dans VB6, comment appeler un objet COM nécessitant un pointeur sur un objet?
- 27. Obtenir la clé d'un objet sur un objet Collection
- 28. Liste des fonctions C++
- 29. Débogage des fonctions javascript
- 30. Validation ModelMultipleChoiceField agissant différemment selon le widget