Model View Control – für einmal anders

model view controlWem der Begriff Model bekannt ist, hat auch schon eines oder mehrere davon gesehen (View). Doch wie verhält es sich mit dem Controller? Hat das etwas mit Buchhaltung zu tun?

Begriffe

Weit gefehlt: MVC (oder Model View Controller) ist ein Begriff aus der Software-Entwicklung. Es gibt unzählige Erklärungen und Beschreibungen. Die Kernpunkte können wie folgt zusammengefasst werden:

  • In der Geschäftslogik (oder Businesslogik) einer Anwendung steckt das Know-How. Diese Logik muss wiederverwendbar sein. Sie ist unser Model.
  • Die nackten Resultate der Geschäftslogik müssen auf verschiedenen Endgeräten dargestellt werden. Das sind unsere Views.
  • Damit das Model weiss, was es machen muss und die View stets die aktuellen Daten bekommt, braucht es einen Controller. Der Controller ist somit das Bindeglied zwischen Model und View.
  • Dank dieser Kapselung haben z.B. Änderungen in der View keinen Einfluss aufs Model. Der Testaufwand reduziert sich entsprechend.

Diese Grundlagen reichen bereits, um ein konkretes Beispiel anzuschauen. Die Steuerersparnis beim Einzahlen in die 3. Säule und die Kapitalsteuern bei deren Bezug sind kantonal unterschiedlich.

Model View Control
Model View Control

Aufgaben View

  • Eingabe aller benötigten Daten: Steuerbares Einkommen und Vermögen, Einzahlung und Kapital 3. Säule, Auswahl Kanton
  • Buttons für die gewünschten Aktionen: Werte berechnen oder Eingabe löschen
  • Anzeige der berechneten Daten: Steuerersparnis und Kapitalsteuern

Aufgaben Controller

  • Erkennen der Aktionen, z.B. Werte berechnen
  • Auslesen und konvertieren der Eingabedaten
  • Übergabe der Daten ans Model und Start der richtigen Berechnung(en)
  • Übergabe der berechneten Werte an die View

Aufgaben Model

  • Berechnung Steuerersparnis für alle Kantone
  • Berechnung Kapitalsteuern für alle Kantone

Designaspekte

Wie zu Beginn erwähnt, steckt im Model unser Know-How. Es lohnt sich also, beim Design ein paar Punkte zu berücksichtigen:

  • Das Model rechnet immer mit typisierten Werten (z.B. Integer, Double). Liegen die Eingabedaten als String vor, müssen diese vorgängig vom Controller konvertiert werden.
  • Die Validierung der Eingabedaten (sind alle Mussfelder ausgefüllt, wurden gültige Zahlen eingegeben) geschieht in der View oder im Controller, nicht aber im Model selbst.
  • Die Validierung von Grenzwerten (Einzahlung 3. Säule >= 0) kann im Model oder Controller erfolgen. Wenn einzelne Werte von anderen abhängig sind, kann die Validierung nur im Model gemacht werden.
  • Die Schnittstelle zur Berechnung der Steuerersparnis und der Kapitalsteuern ist für alle Kantone gleich, die Implementierung für jeden Kanton unterschiedlich. Daher drängt sich die Definition eines Interfaces auf. Ein Beispiel mit Java:
Sauele3a Interface
Sauele3a Interface

Anhand der folgenden Beispiele wird klar, warum eine solche Trennung Sinn macht:

  • Maximalbetrag für Einzahlung ändert jedes Jahr: betroffen ist nur das Model resp. die konkreten Implementierungen der einzelnen Kantone. In der View und im Controller ändert nichts. Somit muss nur das Model getestet werden.
  • Die aktuelle View ist mit Swing (Java) realisiert. Die Anwendung soll im Internet zur Verfügung stehen. Dies wird mit JSF erreicht. Das Model bleibt unverändert, Controller und View gibt es in dieser Form nicht mehr.
  • Bei der Validierung der Mussfelder sollen die nicht ausgefüllten Felder rot markiert werden. Je nach eingesetzter Technologie ist nur die View betroffen, ev. noch der Controller. Das Model ist auf jeden Fall nicht betroffen.

Weiterführende Links:

MVC: http://de.wikipedia.org/wiki/Model_View_Controller