Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!
Werbeanzeige
Wenn ich das richtig lese erstellst du Interfaces und benutzt sie nie.
Community-Fossil
Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer
Es ist ja keine Schande etwas falsch zu machen, als Programmierer tu ich das täglich, [...].
Es ist ja keine Schande etwas falsch zu machen, als Programmierer tu ich das täglich, [...].
Sollten ValidPath und ValidExcel ermitteln, ob der übergebene Dateipfad gültig war oder ob es sich hinter den Pfad um eine gültige Excel-Tabelle handelt, dann solltest du statt dieser Methoden eher Exceptions an den entsprechenden Stellen verwenden (im Konstruktor des Dateisuchers und in Read).
Ich habe es in der letzten Nachricht zwar noch nicht angemerkt, aber fileplace ist ein ungünstig gewählter Name. path oder filename sind in der Hinsicht besser geeignet. Wenn mann meherere Dateipfade übergeben will, dann benennt man diese i. d. R. auch nach ihrer Bedeutung (bspw. excelFileName oder projectRoot).
Was macht die Write-Methode? Woher weiß sie (da keine Parameter), was sie machen soll?
Deine Anwendung vollzieht dem Anschein nach 3 Schritte:
Auslesen aller relevanten ZeichenkettenHerausfinden, welche Zeichenketten verwendet werdenHervorheben der entsprechenden Zeilen in der Exceltabelle
Den ersten und letzten Schritt würde ich dabei am ehesten dem "ExcelHandler" zuweisen, auch wenn diese einen anderen Namen verdient hätte.
Beim Aufruf des Konstruktors könnte die Exceldatei ausgelesen und die entsprechenden Zeilen gesucht und deren Positionen vermerkt werden. (Die oben erwähnte Exception würde dann ggf. vom Konstruktor geworfen werden und die Methode Read würde entfallen) Über eine Methode GetFoo (ich weiß nicht, was in den Zeichenketten enthalten sind, daher kann ich keinen entsprechenden Namen anbieten) werden alle Foos bspw. als Stirng-Array zurückgegeben.
Wenn die Verarbeitung fertig ist, könnte dann entweder über ein HighlightFoo(String) oder ein SetFooHighlight(String, bool) bestimmt werden, welche Foos hervorgehoben werden sollen.
Mit einem Aufruf von Write könnte die Datei dann wieder an der gleichen Stelle gespeichert werden, von der sie ausgelesen wurde.
(Die Methode ValidExcel würde ebenfalls entfallen.)
Das Filtern der Zeichenketten lässt sich wieder unterteilen:
Suchen aller Dateienanalysieren einer jeden Datei
Für den ersten Schritt gibt es schon eine entsprechende Funktionalität. Da das Auslesen einer Datei sich auch einfach machen lässt, ist der letzte Schritt nur noch das Prüfen eines jeden Foo, ob es in dieser Datei vorhanden ist, um es sich dies dann zu merken. Da es keine Beteiligten weiter gibt (wie bspw. CSharpCodeFile oder FileFilter), kann man die Funktionalität in der gleichen klasse (statisch) ablegen, in der auch die Main-Methode liegt. (Zur optimierung sollte man beim Durchsuchen der Dateien eine Liste mit allen noch nicht gefundenen Foos und eine mit allen gefundenen Foos haben, die Dateien nur solange durchsuchen, wie man noch nicht alle durchgegangen ist und noch nicht alle Foos gefunden hat, und innerhalb der Dateien nur nach den noch nicht gefundenen Foos suchen. Bei einem Fund wird ein Foo dann von der einen in die andere Liste geschoben.)
Am Ende würde nur noch die Klasse übrig bleiben, die dein bestimmtes Exceltabellen-Format ("diese Zeilen und diese Spalten sind auf diese Art belegt") darstellt. Dass die anderen Dateien entfallen ist nicht weiter dramatisch, da sie bisher ohnehin eher so aussehen, als wären sie da, damit die entsprechende funktionalität in Klassen liegt.
Erweiterbarkeit:
Es ist zwar ganz hübsch, dass du dir darüber Gedanken machst, allerdings ist meine (und scheinbar auch die von einer paar anderen) eher die, dass eine Software erst einmal so implementiert wird, dass sie die Anforderungen genau abdeckt und erst später erweitert wird, wenn es auch erforderlich ist. In gewissem Maße ist es vielleicht sinnvoll, einen flexiblen Ansatz zu wählen, die Komplexität steigt aber, je flexibler die Lösung sein soll.
Werbeanzeige