Desing Problem
-
Morgen,
sorry mir ist kein besserer Titel eingefallen ich hoffe ich schaffe es trotzdem das Kernproblem darzustellen. Ich schreibe gerade an einer GUI Anwendung, diese hat bestimmte Funktionen welche frei auswählbar(nach klicken eines Buttons werden die ausgewählten Aufgaben durchgeführt) sind und welche ich gerne in einer Klasse kapseln würde da sie alle im Grunde mit ein und dem selben Dictionary<string, string> arbeiten. Diese Aufgaben sollen aber in einem seperaten Thread durchgeführt werden und mit dem Form-Thread interagieren(Einträge zur Listbox hinzufügen). Im moment sieht es so aus das ich eine "Oberfunktion" der Klasse in einem anderen Thread starte die dann je nach ausgewählten Optionen die anderen Funktionen aufruft. Diese Lösung stell mich aber irgendwie nicht zufrieden und ich weiß nicht ob es dafür vielleicht einen besseren Ansatz gibt.
Vielen Dank im Vorraus.
-
Die Infos sind ein wenig dürftig. Was stellt Dich nicht zufrieden? Wo hakt's?
Im Prinzip stimmt das ganze so schon. Die Form agiert halt als Client und delegiert die eigentliche Aufgabe an ein Command-Objekt, welches seinerseits eine Template Method für die Berechnung zur Verfügung stellt, die durch Unterklassen spezialisiert werden können.
Google ggf. mal nach den Begriffen „Command Pattern“ und „Template Method Pattern“. Aber so wie's sich anhört, benutzt Du das Schema eh schon.
-
Danke für die Antwort ich werde mich damit beschäftigen.
Grob sieht der Quelltext so aus.class Worker { /* + events und delegates onFileFound onFileScanned onDone usw.. */ public Worker() { /* Dictionary initialisieren */ } public void Work() { SearchFiles(); /* Je nach Option ParseFiles(), QueryInSQLiteDb() oder beides. */ } public void SearchFiles() { /* Dateien finden und im Dictionary speichern onFileFound aufrufen um Eintrag in die ListView zu schreiben */ } public void ParseFiles() { /* Dateien nach bestimmten stellen durchsuchen onFileScanned aufrufen um Farbe des Eintrages zu ändern */ } public void QueryInSQLiteDb() { /* Dateien nach bestimmten stellen durchsuchen onFileScanned aufrufen um Farbe des Eintrages zu ändern */ } }