2009-09-05 8 views
1

Dans mon programme (une application de console qui édite et impute des données), je donne à l'utilisateur la possibilité de fournir un dictionnaire de données de différentes façons: fichiers texte délimités par des tabulations, Classeurs Excel ou dans une base de données. Le dictionnaire se compose de plusieurs (12-15) fichiers/feuilles/tables. J'essaie de trouver un bon moyen de charger les données des différentes sources dans la base de données.Validation des données d'un fichier dans .NET

Ma solution jusqu'à maintenant a été d'utiliser un référentiel pour isoler les différentes sources de données et de faire en sorte que ces dépôts crachent les DTO que je mappe sur mon modèle de domaine. J'utilise le pattern Builder pour contrôler la séquence entière des événements.

Fondamentalement, la séquence des événements pour chaque fichier/feuille/table est:

  1. Obtenez les DTO du référentiel
  2. Valider les informations contenues dans les DTO
  3. Puis
    • Si la les données sont bonnes, mappez l'entité de domaine
    • sinon conservez une liste d'erreurs en cours d'exécution.

Ma question est la suivante: Je suis en train de trouver le meilleur endroit où est de valider les informations contenues dans les DTO? Une solution possible était d'ajouter une interface sur les DTO comme si

public interface IValidate 
{ 
    void Validate(); 
    bool HasErrors { get; } 
    IEnumerable<string> GetErrorMessages(); 
} 

est-ce trop lourd pour un DTO? La validation devrait-elle avoir lieu ailleurs? Désolé si c'est un peu subjectif.

+3

Qu'est-ce que DTO? (lien est OK) –

+1

Je pense que "Objet de transfert de données" de PoEAA de Martin Fowler;) – TheVillageIdiot

+0

Oui, il est ici: http://martinfowler.com/eaaCatalog/dataTransferObject.html – TheVillageIdiot

Répondre

1

Je ne peux pas répondre à votre question définitivement car, comme vous l'avez dit, la question semble subjective et toute réponse serait en fin de compte une opinion. Il semble que vous vous battez vraiment avec une décision de conception basée sur la définition «académique» d'une DTO plutôt que sur une exigence pragmatique. Nous y avons tous été. Lorsque je suis confronté à des situations similaires, j'ai généralement tendance à réaliser la mise en œuvre de la manière la plus simple et la plus directe, car je peux éviter des choses comme des relations complexes étroitement couplées et des montants de conception excessifs. De cette façon, une fois que je serai capable de tout faire fonctionner, je peux réfracter à partir de là aura moins d'impact. Dans l'ensemble, il semble que vous construisiez une sorte de système ETL. Je ne sais pas à quelle plate-forme vous avez affaire, mais si vous utilisez SQL Server Avez-vous regardé SQL Server Integration Services? Il a beaucoup de constructions pour gérer des choses comme des documents Office, XML, et des fichiers plats comme sources de données.

De toute façon, bonne chance avec votre lutte.

+0

ETL = Extraire, transformer et charger? http://en.wikipedia.org/wiki/Extract,_transform,_load –

+0

Merci pour la réponse Daniel, mais j'essaie simplement d'obtenir des informations (un dictionnaire de données dans ce cas) dans mon programme pour que je puisse l'utiliser . Le programme est un système d'édition et d'imputation par lot qui n'a absolument rien à voir avec l'ETL. –

Questions connexes