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
    		*/
    	}
    }
    

Anmelden zum Antworten