Software-Entwicklung MVC
20. April 2015 - 18:42 Uhr Martin Hager HFU Informatik
Model View Controller (nicht dieses Model ist gemeint bei der Software-Entwicklung)

Model View Controller für Dummies


Wem 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?


MVC: Ein Begriff aus der Software-Entwicklung

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 wieder verwendbar 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.


Software-Entwicklung: Beispiel MVC


MVC: Ein konkretes Beispiel

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.



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


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:

   public interface ISaeule3a {

/**

* Berechnung Steuerersparnis, wenn in die S3a einbezahlt wird.

*/

int berechneSteuerErsparnis(int steuerbaresEinkommen,

int steuerbaresVermoegen, int einzahlungS3a)

throws KeinAbzugMoeglichAusnahme;

/**

* Berechnung Kapitalsteuern, wenn Kapital S3a ausbezahlt wird.

*/

int berechneKapitalSteuern(int kapitalS3a)

throws KeineAuszahlungMoeglichAusnahme;

}


MVC: Trennung macht Sinn

Anhand der folgenden Beispiele wird klar, warum eine solche Trennung bei der Software-Entwicklung 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


Martin Hager
Bereichsleiter Informatik HFU













Der Autor ist u. a. auch verantwortlich für das Nachdiplomstudium Informatik und Web-Engineering.

Ein Kommentar
Frank: Ineressanter Beitrag. Ein Syntax-Highlighter für den Blog wäre cool, dann könnte man den Code etwas besser lesen. Ich setze bei meinem blog auf: http://alexgorbatchev.com/SyntaxHighlighter/integration.html 14.12.2015 18:43 Uhr
300/300