# Warum/Wann mehrere Modells beim MVC-Pattern verwenden ?



## Guest (3. Apr 2006)

Hallo,

ich habe jetzt schon in manchen Beiträgen in verschiedenen Foren gelesen, das man in bestimmeten Situationen auch mehrere Modelle verwenden soll/muss. 

In allen "offizielen" Erklärungen und Tutorials zum Thema MVC-Pattern wird das aber nie erwähnt bzw. ich verstehe auch nicht den Sinn dahinter warum man das machen sollte.

Ist da was dran und wenn ja ab wann wäre dann ein Grund mehrere Modells zu verwenden ?


----------



## Guest (3. Apr 2006)

Bevor andere mir zuvor kommen, die Mehrzahl von Model ist natürlich Modelle und nicht Modells.  :wink:


----------



## SnooP (3. Apr 2006)

Was verstehst du denn genau unter einem Modell und was sind dann mehrere Modelle?
Für mich steht das M für die Modellschicht... unter Umständen könnten tatsächlich verschiedene Modelle aus unterschiedlichen Bereichen z.B. visualisiert werden... dann hättest du deine mehreren Modelle...


----------



## Guest (3. Apr 2006)

Vielen Dank für deine Antwort.

Für mich ist es eigentlich auch eine Modellschicht bzw. dann konkreter eine Art Container der die verschiedenen Daten eben dann Zentral enthält.

Aber das ist alles schon wieder viel zu theoretisch, ich weiss halt nicht wie das praktisch auszusehen hat.

Machen wir einfach mal ein grobes Beispiel: 

Es soll eine Anwendung erstellt werden, mit der man die Buchhaltung und CD`s brennen kann.
Das sind eigentlich zwei für sich einzelne Anwendungen die nicht viel gemeinsame haben, wäre dass jetzt ein Grund zwei Modelle anzulegen ?

z.B. eine Model-Klasse für die Buchhaltungs-Daten und eine für die CD-Daten ?




> unter Umständen könnten tatsächlich verschiedene Modelle aus unterschiedlichen Bereichen z.B. visualisiert werden... dann hättest du deine mehreren Modelle...



Was wären/sind unterschiedliche Bereiche z.B. dann ?


----------



## SnooP (3. Apr 2006)

nunja - eine reichlich seltsame Anwendung  ...

also generell - das Modell einer Anwendung sind diejenigen Klassen, die spezielle Entitäten (sprich Dinger) aus der Realität auf Objekte in Java abbilden lassen... z.B. eine Kundendatenbank mit Personen (Kunden, Spezielle-Rabatt-Kunden oder auch Adress-Objekten die an den Kunden angehängt sind). Das Modell beinhaltet also dann diese Personenobjekte, die Adressen und alle Verbindungen dazwischen...
die Visualisierung dieser Daten (Tabelle) ist Aufgabe der Präsentationsschicht, also dem View... während der Controller der Vermittler zwischen Beidem ist... also wenn ich irgendwo auf nen Delete-Button clicke, dann lösche ich nicht aus der GUI-Klasse heraus das entsprechende Personen-Objekt sondern leite das ganze über die Controller-Klasse, die dann auch noch Fehler abfangen kann etc...

Das ist im groben das MVC-Konzept... - als mehrere Modelle könnte man ansehen: Kundendaten-Modell und Lieferanten-Modell... in einer Anwendung. Wobei für mich diese beiden Modelle nix anderes sind als genau "das" Modell der Anwendung. Das ist aber stark Definitionssache..

Nicht zu Verwechseln ist dieses Modell mit möglichen Modellen von Anzeigeelementen in z.B. Swing... da gibts spezielle Modellklassen für die Combobox oder den JTree. Das sind spezielle Modellklassen als Datenhintergrund für die Anzeigeelemente.. und da kanns natürlich schon mehrere Modellklassen geben...


----------



## Mr. Burns (4. Apr 2006)

So, habe mich mal registriert.




> als mehrere Modelle könnte man ansehen: Kundendaten-Modell und Lieferanten-Modell... in einer Anwendung. Wobei für mich diese beiden Modelle nix anderes sind als genau "das" Modell der Anwendung. Das ist aber stark Definitionssache..



Fasst du dann diese beiden Modelle nochmal in ein einziges zusammen, wo dann in der ganzen Anwendung nur noch auf dieses zugegriffen wird ?


```
//Alle Controller greifen nur über das Modell "AnwendungsModell" auf die Daten zu

class AnwendungsModell
{

  private KundendatenModell _KundendatenModell = KundendatenModell;
  private LieferantenModell _LieferantenModell = LieferantenModell;

  public void setKunden(string Name)
  {
     _KundendatenModell.setKunden(Name);
  }

  public void setLieferant(string Name)
  {
     _LieferantenModell.setLieferant(Name);
  }


}
```


----------



## SnooP (4. Apr 2006)

jein... - du musst das "Modell" nicht zentral in einer Klasse zusammenfassen... auch KundenDatenModell ist nur dann notwendig, wenn du denn sowas brauchst... - wie gesagt - es muss keine zentralle Modellklasse geben - das Modell ist nur ein abstrakter Begriff für alle Entitäten die in deiner Anwendung vorkommen... - wo die gespeichert werden, ist völlig wumpe...
Bei den Kundendaten könnte man sich z.B. auch ne Unternehmensklasse vorstellen (z.B. halt dein eigenes)... da erzeugst du dann nen Objekt von und dieses Objekt ist das zentrale Objekt, welches die Personen in einer Liste speichert (oder wie auch immer)... evtl. gibt dieses Objekt auch noch Methoden vor, wie man an diese Personen rankommt etc (Iterator-Interface)...


----------



## Mr. Burns (4. Apr 2006)

Danke, Danke, Danke  :toll:


----------

