Design Patterns wie Model-View-Controller

Design-Patterns

Die Entwicklung von Software-Komponenten in den vergangenen 30 Jahren hat immer wieder gezeigt, dass sich spezielle Probleme in unterschiedlichen Bereichen von Projekt zu Projekt wiederholen. Der Grund hierfür ist, dass sich Softwaresysteme von ihrer Grundarchitektur her stark ähneln. So hat beispielsweise jedes System eine grafische Oberfläche, um mit dem Benutzer zu interagieren. Weiterhin besteht bei fast jeder Anwendung die Notwendigkeit, auf einen dauerhaften Datenbestand zuzugreifen. Der Zugriff auf die Datenschicht wird häufig an mehreren Stellen in der Anwendung (oder sogar von verschiedenen Anwendungen) benötigt. All diese Anforderungen veranlassen Entwicklungsteams dazu, sich schon im Vorfeld Gedanken zum Aufbau des Gesamtsystems zu machen. Dieser Aufbau wird als die eigentliche Software-Architektur bezeichnet. Diese bildet die Basis, auf der jede weitere Funktionalität beruht. Darüber hinaus definiert eine sinnvoll konzipierte Architektur ein Vorgehen für in Zukunft zu erstellende Komponenten der Anwendung. Dies ist schon deshalb sehr wichtig, da bei großen Projekten häufig, heutzutage u. a. bedingt durch die Globalisierung und die steigende Nachfrage nach guten Entwicklern, eine gewisse Fluktuation in Entwicklerteams herrscht.


Vorteil von Design-Patterns

Eine "geradlinige", d.h. eine sinnvoll strukturierte und gut nachvollziehbare Architektur ermöglicht es neuen Teammitgliedern, schnell in das bestehende System einzusteigen und effektiv an der Weiterentwicklung mitzuwirken. Eine "schlechte", also unübersichtliche Architektur dagegen führt zu Missverständnissen bei den Beteiligten, im schlimmsten Fall zu einem Chaos, das hohe Kosten verursachen kann. Eine weitere Gefahr besteht darin, später eine eigentlich "gute" Architektur zu verändern, diese Änderung aber nicht bis zu Ende durchzuführen. Oftmals wird in der Praxis dafür Zeitdruck als Ausrede benutzt. Beobachtungen zeigen jedoch, dass hierfür ebenso oft mangelnde Motivation der Entwickler verantwortlich ist. Angesichts der hier dargelegten Befunde liegt es nahe, von vornherein die bei der Entwicklung eines Softwaresystems auftretenden Probleme zu beschreiben, nach Standard-Lösungsansätzen zu suchen und diese in einem projektübergreifenden "Best-Practice-Katalog" festzuhalten.

Eric Gamma

Erich Gamma war einer der ersten Entwickler, die erkannten, dass es bei der Entwicklung von Softwarekomponenten neben der syntaktischen Grammatik weitere Regeln gibt. Aufgrund seiner Projekterfahrung war es Gamma möglich, sogenannte Patterns für immer wieder auftretende Anforderungen zu definieren. In seinem 1997 publizierten Buch "Design-Patterns" hat er die ihm bekannten 17 Muster in die Kategorien "Verhalten", "Ablauf" und "Struktur" eingeteilt. Diese von Gamma definierten Muster haben bis heute einen enorm hohen Stellenwert bei Architekten und Entwicklern. Ist es einem Team möglich, sich anhand von Mustern zu verständigen, können Kosten für überflüssige Erklärungsiterationen gespart und somit früher mit der Implementierung begonnen werden. Neue Teammitglieder sind mit den eingesetzten Mustern vertraut und finden sich schnell im Programmcode zurecht. Aufgrund der Tatsache, dass die eingesetzten Muster seit Jahren erprobt sind, ist die Gefahr gering, in eine "architektonische Falle" zu geraten. Bei der Entwicklung von J2EE-Webanwendungen wird, wie in Kapitel 2 beschrieben, ein Grundgerüst durch die von Sun definierte Servlet-Spezifikation bereitgestellt. Diese nimmt dem Entwickler jedoch nicht die Entscheidung ab, wie er seine Klassen benennen bzw. aufteilen soll. Zwar sind sich die meisten Entwickler darüber bewusst, dass Programme auf Dauer nur pflegbar sind, wenn sie die Regeln der Kohäsion1 sowie der losen Kopplung2 befolgen, jedoch steigt die Komplexität mit den Anforderungen im Projekt selbst. Mit wachsender Anzahl der Klassen und Pakete wird es, gerade für unerfahrene Entwickler, immer schwieriger, den Überblick zu behalten und neue Anforderungen der Grundarchitektur entsprechend umzusetzen. Um Entwickler auch bei umfangreichen J2EE-Anwendungen zu unterstützen, kann das Model-View-Controller-(MVC-)Pattern eingesetzt werden. Dieses beinhaltet wiederum weitere Patterns und fasst sie zu einem großen, allgemein für J2EE-Anwendungen definierten Muster zusammen. In den folgenden Unterkapiteln wird das Framework Struts2 vorgestellt und anhand der Struktur einer J2EE-Anwendung beschrieben. Dieses Framework ist insofern exemplarisch für die Fragestellung dieser Arbeit, als das es eine Implementierung des MVC-Patterns ist und sich in den vergangenen fünf Jahren als das am weitesten verbreitete Mainstream-Framework für J2EE-Anwendungen herauskristallisiert hat. Zunächst wird aber auf das MVC-Modell eingegangen, um ein Basisverständnis zu verschaffen.

Head-First macht fantastische Bücher. Dieser Buchtip hat mich selbst weitergebracht: