Java Trennung von Geschäftslogik und Oberfläche (kleines Architekturproblem)

yourhighness

Lt. Junior Grade
Registriert
Feb. 2006
Beiträge
297
Hallo liebes Forum!

Wie trenne ich die Geschäftslogik von GUI-Code am besten? Konkret gehts um folgendes Problem:
Ich habe eine Klasse View in der sich die sämtliche GUI fertig aufgebaut befindet und eine weitere Klasse App in der ich auf Button klicks reagiern will. Wie realisier ich das am saubersten?

Ich hätts mir so gedacht:

in der APP:
PHP:
static ActionListener btn_durchsuchen_actionlistener = new ActionListener() {
		public void actionPerformed(ActionEvent e) {
			//reagiere
		}
	};

in der VIEW:
PHP:
button_durchsuchen.addActionListener(App.btn_durchsuchen_actionlistener);

also mit static hald.. nur das will mir nicht wirklich gefallen.
Jemand vielleicht eine besser Lösung?

Danke im Vorraus ;)
 
Das was da bei dir unter App steht gehört eigentlich noch in die View. Erstelle eine extra Klasse die als Methoden die Aktionen enthält die du behandeln möchtest.

Wenn du es dir einfach machen möchtest gibst du der Klasse als Eigenschaften noch die Elemente mit, die du Manipulieren möchtest. Alternativ kannst du auch die View an die Eigenschaften deines Controllers binden (Bean Bindings), dafür würde ich dann aber auf jeden Fall einen GUI-Editor nehmen, am besten Netbeans, sonst wird das anstrengend. Dann sind die Eigenschaften keine GUI-Elemente mehr sondern Strings, Listen etc.

Mal grob umrissen:
PHP:
public class AppController {
     public JLabel statusField;  //ein Textfeld der View

     public search(ActionEvent e) {
         statusField.setText("Suche...");
         //do some Stuff
     }
}
View:
PHP:
button_durchsuchen.addActionListener(new ActionListener() { 
        public void actionPerformed(ActionEvent e) { 
            applicationController.search(e); // applicationController enthält deine Logik
        } 
    });

Wie du jetzt eine Instanz von AppController in die View und die Viewelemente in den AppController kriegst überlasse ich deiner Fantasie.
 
Zuletzt bearbeitet:
ah ok, 1000 dank. erscheint mir jetzt gleich viel logischer und zusammenhängender.. :)
 
Zurück
Oben