Glop, glop.
(désolé pour le jeu de mot dans l'objet, je n'ai pas pu m'empêcher ^^).
J'ai le cahier des charges suivant :
- 2 structures de fichiers HTML différentes (amdb et scc) contenant des données d'animaux. Chaque fichier HTML contient des données communes comme le nom de l'animal mais pas avec le même XPath.
- les données extraites ont une partie commune stockée dans ExternalAnimal. Les données ont aussi des champs spécifiques uniques à chacune des 2 sources HTML utilisées.
- une fois les données extraites, elles sont exportées en CSV (via CsvHelper).
- le CSV sera ensuite utilisé avec EntityFramework pour importer les données dans une BDD.
- J'ai restructuré le code pour être plus générique dans la façon d'importer ou d'exporter les données pour ExternalAnimal.
En effet, on pourrait vouloir exporter en XML au lieu du CSV. Mais on peut aussi charger le CSV ou le XML pour exporter vers la BDD.
Donc, je me dis que ExternalAnimal et ses classes dérivées n'ont pas lieu de connaitre qui leur envoie des données (CSV, XML, HTML...)
1er problème dans HtmlAnimalLoader :
J'ai du caster vers un type dérivé. Je ne vois pas trop comment utiliser le polymorphisme dans ce cas précis. Alors Est ce que c'est mal d'avoir faire le cast là ? (très probablement je dirais).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 public void Load([Required] AnimalConfiguration config, [Required] ExternalAnimal animal) { AnimalFileConfiguration fileConfig = config as AnimalFileConfiguration; Debug.Assert(fileConfig != null, "config is not a AnimalFileConfiguration type."); // Load HTMl source file. string fullPath = Path.Combine(fileConfig.Path, fileConfig.Filename); Debug.Assert(File.Exists(fullPath), $"File NOT found {fullPath}"); string htmlContent = FileUtility.ReadFile(fullPath, fileConfig.Encoding); // Manage HTML DOM var doc = new HtmlAgilityPack.HtmlDocument(); doc.LoadHtml(htmlContent); this.ExtractHtmlDatas(fileConfig, doc, htmlContent, animal); }
2ème problème lors de l'extraction des données dans ExtractHtmlDatas, je suis aussi obligé de caster ExternalAnimal dans la classe dérivée pour pouvoir remplir les champs (communs ou spécifiques).
Est ce que je suis fatigué à ce point que j'ai pondu une architecture boiteuse ?
Voici le diagramme de classes :
Merci,
Vincent
Partager