# Grundsätzliche Frage zur OOP bzw. zum MVC



## CarloC (14. Aug 2006)

Hallo zusammen,

ich habe eine grundsätzliche Frage zur OOP  bzw. zum MVC.

Angenommen ich habe eine View und über den Controller (in diesem Fall actionPerformed()) rufe ich mein Model auf. Ist es dann sinnvoll z.B. einen Vector, ein Frame usw. zu übergeben, wenn ich mit diesen arbeiten muss? Oder sollte man in diesem Fall im actionPerformed() weiter arbeiten, ohne das eigentliche model auszugliedern?

Für mich stellt sich die Frage ob es die Performance beeinflusst wenn ich einige Objekte an das Model übergebe oder ob das keine Auswirkungen hat. Die Variablen als public zu deklarieren ist ja, so wie ich es verstanden habe, auch nicht gerade die feine Art. Wie macht man es also richtig?

Vielen Dank für die Hilfe


----------



## byte (14. Aug 2006)

> Oder sollte man in diesem Fall im actionPerformed() weiter arbeiten, ohne das eigentliche model auszugliedern?



Was meinst Du mit ausgliedern? Die actionPerformed() könnte einen entsprechenden Aufruf im Modell machen, der Daten liefert (z.B. einen Vector) und sollte diesen dann auch direkt in der View darstellen.

Auswirkungen auf die Performance hat das MVC Prinzip nicht. Der Grund, warum man Model und View durch einen Controller trennen will, ist vielmehr der Kapselungsgedanke oder in einigen Büchern auch lose Kopplung genannt. Man möchte Model und View trennen, so dass diese beiden Subsysteme unabhängig voneinander und austauschbar sind. Dann könnte man z.B. später eine neue View schreiben, das Modell aber unverändert beibehalten.

Du solltest als Anfänger erstmal primär darauf achten, dass vor allem im Modell nichts von der View oder dem Controller drin vorkommt, so dass auf jeden Fall erstmal das Modell unabhängig und wiederverwendbar ist. View und Controller können durchaus auch mal das gleiche sein.


----------



## CarloC (14. Aug 2006)

Danke für die Antwort.

Hier ist nochmal ein Beispiel worauf sich meine Frage gut übertragen lässt:


```
public void actionPerformed(ActionEvent arg0)
{
	Object aktion = arg0.getSource();
		
	if (aktion == btnHinzufuegen)
	{
		new OrgEinheitHinzufuegen(model, gkz, daten);
	}
}
```

Der Controller ist, wenn ich es richtig verstanden habe, ja die Methode actionPerformed() (zumindest in meinem Beispiel). In dieser bilde ich nun ein Objekt von der Klasse OrgEinheitHinzufuegen. Diese macht dann den Insert in die Datenbank, etc. OrgEinheitHinzufuegen wäre dann mein Model (richtig?).

*Nun die eigentliche Frage:* Ist es in Ordnung wenn ich der Klasse OrgEinheitHinzufuegen solch "mächtige" Parameter übergebe? (model ist z.B. mein JTableModel und daten ein Vector mit Objekten).

Vielleicht ist die Frage etwas absurd. Aber für mich als Anfänger macht es den Eindruck als würde ich so riesige Datenpakete durch die Klassen jagen. Wenn das so in Ordnung ist soll es mir aber auch recht sein.


----------



## alehandro (7. Sep 2006)

patr1k hat gesagt.:
			
		

> *Nun die eigentliche Frage:* Ist es in Ordnung wenn ich der Klasse OrgEinheitHinzufuegen solch "mächtige" Parameter übergebe? (model ist z.B. mein JTableModel und daten ein Vector mit Objekten).



es ist vollkommen ok.
Du "jagst" nur Referenzen "durch die Klassen"


----------



## A.T. (7. Sep 2006)

patr1k hat gesagt.:
			
		

> Für mich stellt sich die Frage ob es die Performance beeinflusst wenn ich einige Objekte an das Model übergebe oder ob das keine Auswirkungen hat. Die Variablen als public zu deklarieren ist ja, so wie ich es verstanden habe, auch nicht gerade die feine Art. Wie macht man es also richtig?



Grundsätzlich private, aber über Getter und Setter kommst du da ja immer dran.


----------



## Tobias (7. Sep 2006)

Ein Klassenname wir OrgEinheitHinzufuegen macht mir allerdings Angst, weil man da befürchten muss, dass du OOP im Grundsatz noch nicht verstanden hast. Eine Klasse beschreibt eine Sache, keine Aktion!

mpG
Tobias


----------

