Remo Bergmann1 Frameworks Allgemeines zu Frameworks MVC-Pattern Einordnung der MVC-Frameworks Andere Frameworks Diskussion
Remo Bergmann2 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)
Remo Bergmann3 Frameworks – Definition Vergleich: Autos haben oft gleiches Fahrwerk, Motor, Getriebe Dennoch: eigenständiges Design, Marketing,...
Remo Bergmann4 Frameworks – White-Box Wiederverwendung durch Vererbung - Programmieren statt Konfigurieren Statisch - Konfiguration des Systems wird zur Übersetzungszeit bestimmt Einfaches Design - Vererbung sehr flexibel - Unvorhergesehenes
Remo Bergmann5 Frameworks – White-Box Hot Spots - Vorgesehene Eingriffspunkte Aufwendige Wartung - Abhängigkeiten von Subklassen - Aufwärtskompatibilität sichern
Remo Bergmann6 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
Remo Bergmann7 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
Remo Bergmann8 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
Remo Bergmann9 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
Remo Bergmann10 Frameworks – MVC-Pattern MVC : Model-View-Controller Verbindung zwischen Anwendung und graphischer Oberfläche in Smalltalk80 Trennung Präsentation/Programmierlogik
Remo Bergmann11 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
Remo Bergmann12 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 MVCs durch die Gegebenheiten des HTTP verloren!
Remo Bergmann13 Frameworks(MVC) – Einordnung Eigenschaften: Anwendungssteuerung (aktions- und ereignisgesteuert) View-Technologie Komponenten Behandlung des serverseitigen Zustand
Remo Bergmann14 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
Remo Bergmann15 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; }... }
Remo Bergmann16 Frameworks(MVC) – Aktionsgesteuert Beispiel (View): Vorname: Nachname:
Remo Bergmann17 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"); }
Remo Bergmann18 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
Remo Bergmann19 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
Remo Bergmann20 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!
Remo Bergmann21 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
Remo Bergmann22 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); } 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); } Swing Variante WingS Variante
Remo Bergmann23 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
Remo Bergmann24 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)
Remo Bergmann25 Frameworks(MVC) – Komponenten Meist nur in ereignisgesteuerten Framework zu finden Struts Erweiterung Tiles erlaubt Zusammenstellung von Seiten aus View- Komponenten Grund: hohe Individualisierung von Webanwendungen, Unterstützung von Web- Technologien schlecht
Remo Bergmann26 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
Remo Bergmann27 Frameworks – Einordnung: Features
Remo Bergmann28 Frameworks – andere Frameworks Oftmals macht es Sinn mehrere Frameworks zu verwenden: z.B. Turbine mit Jetspeed Templating Frameworks (Velocity) XML Frameworks (Cocoon) Portalframeworks (Jetspeed)...
Remo Bergmann29 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
Remo Bergmann30 Frameworks – andere: Cocoon Publishing Framework, wandelt je nach anfragenden Client ein XML-Formular ins entsprechende Format Vortrag in 2 Wochen
Remo Bergmann31 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
Remo Bergmann32 Frameworks – Literaturhinweise 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
Remo Bergmann33 Frameworks – Diskussion Wann ist der Einsatz von Frameworks sinnvoll? Ereignis- oder aktionsorientierte MVC- Frameworks? Pros? Contras?