Frameworks





Allgemeines zu Frameworks
MVC-Pattern
Einordnung der MVC-Frameworks
Andere Frameworks
Diskussion
27.05.04
Remo Bergmann
1
Frameworks – Definition
„Ein Framework (Rahmenwerk) ist ein durch
einen Software-Entwickler anpassbares oder
erweiterbares System kooperierender Klassen,
die einen wiederverwendbaren Entwurf für einen
bestimmten Anwendungsbereich
implementieren.“
(Balzert)
27.05.04
Remo Bergmann
2
Frameworks – Definition
Vergleich:
 Autos haben oft gleiches Fahrwerk, Motor, Getriebe
 Dennoch: eigenständiges Design, Marketing, ...
27.05.04
Remo Bergmann
3
Frameworks – „White-Box“



Wiederverwendung durch Vererbung
- Programmieren statt Konfigurieren
Statisch
- Konfiguration des Systems wird zur
Übersetzungszeit bestimmt
Einfaches Design
- Vererbung sehr flexibel
- Unvorhergesehenes
27.05.04
Remo Bergmann
4
Frameworks – „White-Box“


Hot Spots
- Vorgesehene Eingriffspunkte
Aufwendige Wartung
- Abhängigkeiten von Subklassen
- Aufwärtskompatibilität sichern
27.05.04
Remo Bergmann
5
Frameworks – „Black-Box“




Wiederverwendung durch Komposition
- Konfigurieren statt Programmieren
Dynamisch
- Konfiguration des Systems wird zur
Laufzeit bestimmt
Einfache Wartung
- weniger Abhängigkeiten
Komplexes Design
- Konfiguration wenig flexibel
- Gutes abschätzen der Änderbarkeiten
notwendig
27.05.04
Remo Bergmann
6
Frameworks – „White vs. Black“


White-Box und Black-Box kaum noch in Reinform
heut, meist Mischform aus beiden
(Grey-Box)
White-Box Frameworks werden im Laufe der Zeit
immer mehr zu Black-Box Frameworks
-> je reifer ein Framework umso mehr Black-Box
Komponenten sind enthalten
27.05.04
Remo Bergmann
7
Frameworks – Vorteile







Höchsten Grad von Wiederverwendung
Kodifiziertes Wissen erfahrender Entwickler
Bessere Aufteilungen der Aufgaben im Team
Verbesserte Wartung
Höhere Produktivität
Kleinere Applikationen
Für viele Probleme schon Lösungen
27.05.04
Remo Bergmann
8
Frameworks – Nachteile





Unüberschaubar viele Frameworks
Erfordern meist lange Einarbeitungszeit
Geringere Freiheiten
Frameworks später nicht oder schwer
austauschbar und oft nicht ineinander
integrierbar
Einsatz von Externen schlecht möglich
Fazit: -> Diskussion
27.05.04
Remo Bergmann
9
Frameworks – MVC-Pattern



MVC : „Model-View-Controller“
Verbindung zwischen Anwendung und
graphischer Oberfläche in Smalltalk80
Trennung Präsentation/Programmierlogik
27.05.04
Remo Bergmann
10
Frameworks – MVC im Internet
Problem: HTTP
 View kann nicht nach Bedarf aktualisiert werden
 Client ist nicht wie gewohnt kontrollierbar
View: HTML, JSP aber auch Scriptsprachen möglich
Model: JavaBeans, EJBs (empfohlen) aber auch
„normale“ Java Klassen möglich
27.05.04
Remo Bergmann
11
Frameworks – MVC im Internet
Controller: als Servlet organisiert, Controller kann
hier allerdings nicht den View über Änderungen
informieren

Einzige Möglichkeit für Benutzer: Refreshbutton
des Browsers
Fazit: Es geht Funktionalität des klassischen MVC‘s
durch die Gegebenheiten des HTTP verloren!
27.05.04
Remo Bergmann
12
Frameworks(MVC) – Einordnung
Eigenschaften:




Anwendungssteuerung (aktions- und
ereignisgesteuert)
View-Technologie
Komponenten
Behandlung des serverseitigen Zustand
27.05.04
Remo Bergmann
13
Frameworks(MVC) – Aktionsgesteuert



Stärkere Orientierung an Besonderheiten von
HTTP
Anwendungssteuerung durch Web-typisches
Request/Response (Sun-Model 2)
Keine Aufteilung in Widgets, Methoden global
definiert, Ursprung des Request betrifft immer
ganze Seite
27.05.04
Remo Bergmann
14
Frameworks(MVC) – Aktionsgesteuert
Beispiel (Model):
public class UserDaten extends Bean {
private String firstname = "";
public String getFirstname() {
return firstname;
}
public void setFirstname(String firstname) {
this.firstname = firstname;
}
...
}
27.05.04
Remo Bergmann
15
Frameworks(MVC) – Aktionsgesteuert
Beispiel (View):
<jsp:useBean id=„User.Daten" scope="session„ class="user.Daten" />
<table border="0" cellpadding="4">
<tr>
<td>Vorname:</td>
<td><%= user.Daten.getFirstname() %></td>
</tr>
<tr>
<td>Nachname:</td>
<td><%= user.Daten.getSurname() %></td>
</tr>
</table>
27.05.04
Remo Bergmann
16
Frameworks(MVC) – Aktionsgesteuert
Beispiel (Controller):
final class ActionDoEditierenPassword implements ActionHandler{
public void handleAction(String action, StateBean s,
HttpServletRequest request, HttpServletResponse
response) {
UserState state = (UserState) s;
state.setNavigation("editPassword");
}
}
27.05.04
Remo Bergmann
17
Frameworks(MVC) – Aktionsgesteuert
Aktionsgesteuerte Frameworks:
 Struts – fast schon Standard-Framework,
Vortrag anschließend an diesen
 Turbine – Votrag nächste Woche
 WebWork – ähnlich zu Struts, dennoch
distanziert in einigen Punkten, leider nicht
so intensiv weiterenwickelt
 Maverick – angeblich soll es die Besten
Fähigkeiten von Struts, Webwork, Cocoon2
verbinden
27.05.04
Remo Bergmann
18
Frameworks(MVC) – Ereignisgesteuert





Bestes Beispiel für Ereignissteuerung: Swing
Benutzeraktionen erzeugen Ereignisse
(Mausclicks, Tastaturanschläge, ...)
Ereignisse lösen Methodenaufrufe aus
Webseite wird aus einzelnen Komponenten
zusammengesetzt
Webseiten als Java-Klassen
27.05.04
Remo Bergmann
19
Frameworks(MVC) – Ereignisgesteuert
Beispiel: „Millstone – Hello World“
public class HelloWorld extends
org.millstone.base.Application {
public void init() {
Window main = new Window("Hello window");
setMainWindow(main);
main.addComponent(new Label("Hello World!"));
}
}
JavaScript und HTML wird vom Framework erzeugt!
27.05.04
Remo Bergmann
20
Exkurs: MVC in Swing




Nutzt modifiziertes MVC
View und Controller wurden zusammengefasst,
da Kommunikation zwischen View- und
Controller-teil einer Komponente oft zu
komplex war
Model-Delegate-Prinzip oder
auch Model-View-Presenter
Programmieren wird
übersichtlicher
27.05.04
Remo Bergmann
21
Frameworks(MVC) – Ereignisgesteuert
class CalculatorPanel extends JPanel
implements ActionListener{
public CalculatorPanel(){
super(new GridLayout());
f1=new JTextField();
f2=new JTextField();
f3=new JTextField();
f3.setEnabled(false);
add(f1);add(f2);add(f3);
JButton but=new JButton("Add!");
add(but);
but.addActionListener(this);
}
Swing Variante
27.05.04
class CalculatorPanel extends SPanel
implements ActionListener{
public CalculatorPanel(){
super(new SGridLayout(4));
f1=new STextField();
f2=new STextField();
f3=new STextField();
f3.setEnabled(false);
add(f1);add(f2);add(f3);
SButton but=new SButton("Add!");
add(but);
but.addActionListener(this);
}
WingS Variante
Remo Bergmann
22
Frameworks(MVC) – Ereignisgesteuert
Andere ereignisgesteuerte Frameworks:



WebObjects
Mitte 90ziger Jahre von Apple veröffentlicht
Echo
keine Kenntnisse von JavaScript und HTML nötig
Tapestry
=> Vortrag nächste Woche
27.05.04
Remo Bergmann
23
Frameworks(MVC) – View-Technologie




Generierung von HTML aus dem Framework
Echo, WingS, Millstone (ereignisgesteuerte)
Templating-Technologie
Tapestry, WebObjects...
bei vielen lässt sich Templateframework
verwenden (Struts, Turbine...)
Generierung von HTML durch Transformation
Framework generiert XML
unterstützt z.B. durch Struts, Millstone...
JSP (aktionsgesteuerte Frameworks)
27.05.04
Remo Bergmann
24
Frameworks(MVC) – Komponenten



Meist nur in ereignisgesteuerten Framework zu
finden
Struts Erweiterung „Tiles“ erlaubt
Zusammenstellung von Seiten aus ViewKomponenten
Grund:
hohe Individualisierung von
Webanwendungen, Unterstützung von WebTechnologien schlecht
27.05.04
Remo Bergmann
25
Frameworks(MVC) – Serverseitiger
Zustand

Optimal: Zustand nicht halten bevor User sich
einloggt und dann möglichst gering!
Frage an alle: Warum nicht vorher?

Ereignisgesteuerte Frameworks haben hier große
Probleme, da sie meist ein Management
erzwingen
Aktionsgesteuerte Frameworks überlassen alles
weitgehend Programmierer

27.05.04
Remo Bergmann
26
Frameworks – Einordnung: Features

www.waferproject.org
27.05.04
Remo Bergmann
27
Frameworks – andere Frameworks
Oftmals macht es Sinn mehrere Frameworks
zu verwenden: z.B. Turbine mit Jetspeed




Templating Frameworks (Velocity)
XML Frameworks (Cocoon)
Portalframeworks (Jetspeed)
...
27.05.04
Remo Bergmann
28
Frameworks – andere: Velocity




Erzeugt Output: HTML, SQL, Postscript, Mails...
Vereinfacht Entwicklung des „Look and Feel“ der
Anwendung
Benutzt einfache Scriptsprache
Als Komponente in MVC-Frameworks oder als
Stand-alone-System
27.05.04
Remo Bergmann
29
Frameworks – andere: Cocoon


Publishing Framework, wandelt je nach
anfragenden Client ein XML-Formular ins
entsprechende Format
Vortrag in 2 Wochen
27.05.04
Remo Bergmann
30
Frameworks – andere: Jetspeed



Portale ähneln sich sehr, aber: Erstellung von
Portalen enorm aufwendig
-> darauf setzt Jetspeed
Im Idealfall Portale ohne eigentliche
Programmierarbeit (Konfiguration von Inhalt)
Portalseite setzt sich aus Portlets (kleine
Webbausteine) zusammen
27.05.04
Remo Bergmann
31
Frameworks – Literaturhinweise






http://www.oio.de
http://www.waferproject.org
http://www.dynabean.de
Software&Support Verlag:
Portale und Webappl. mit Apache Frameworks
Struts Java Framework für Webanwendungen
Howard M. Lewis Ship: Tapestry in Action
diverse wissenschaftliche Arbeiten
27.05.04
Remo Bergmann
32
Frameworks – Diskussion

Wann ist der Einsatz von Frameworks sinnvoll?

Ereignis- oder aktionsorientierte MVCFrameworks? Pro‘s? Contra‘s?
27.05.04
Remo Bergmann
33

Frameworks