Mittwoch, 5. August 2009

Das MVC Pattern – Teil 1

Nachdem ich in meinem ersten Artikel mal ein paar grundlegende Worte zu Patterns verloren habe, möchte ich nun mit den ersten spezifischeren Beispielen beginnen.
Da es eine Menge an Design Patterns gibt - die das Leben eines Entwicklers bereichern - stellt sich doch die Frage: „Womit beginnt man am Besten?“
Nun ja … nach einigen Überlegungen habe ich mich für das Nächstliegendste entschieden und beginne mit dem abstraktesten und gleichzeitig umstrittensten Pattern, dem Model View Controller Pattern. Umstritten deshalb weil man sich uneins ist, ob das MVC-Pattern eher ein Architektur- oder ein Design-Pattern ist! Aber für mich ist es ehrlich gesagt einfach nur ein abstraktes Pattern, das sowohl für die Gestaltung einzelner Applikationsschichten als auch für die Planung der Architektur eingesetzt werden kann. Und bei späteren Beispielen anderer, speziellerer Patterns wird sich zeigen, dass diese auf dem MVC Gedanken aufsetzen.

Genug des Vorgeplänkels und ab an die harten Fakten:

Warum existiert dieses Pattern?

Die Daseinsberechtigung vieler Computersysteme bzw. vieler Softwarelösungen besteht im wesentlichen darin, dass zum Einen Daten aus einem Datenspeicher geholt und dem User auf irgendeine Art angezeigt werden, zum Anderen die vom User veränderten Daten wieder in den Datenspeicher zurück fließen. Etwas komplexere Systeme bereiten - in einem Zwischenschritt - die Daten ggf. noch auf, aber im wesentlichen geht es bei den angesprochenen „Systemen“ um den Informationsfluss zwischen UI und Datenspeicher. Diese Tatsache führt oftmals dazu, dass diese beiden Bereiche so eng wie möglich aneinander gebunden werden um erhoffte Performance Vorteile und verringerten Entwicklungsaufwand zu erreichen. Am Ende entsteht ein sogenanntes monolitisches Gebilde, was einige Probleme aufwirft:

  • fehlende Flexibilität
  • geringe (Teil-)Wiederverwendbarkeit
  • schlechte bis fehlende Struktur

Hier setzt das MVC Pattern an und versucht eben diese Probleme zu vermeiden bzw. sie ins Gegenteil zu kehren. Da der beschriebene Kontext sich von Architekturebene bis auf „modulare“ Ebenen und spezifische Teilproblematiken herunter brechen lässt, ist das MVC Pattern (meiner Meinung nach) eher ein abstraktes Pattern das sich nicht auf SW-Architekturen beschränkt.

Grundlagen/Grundgedanke dieses Patterns

Das Model-View-Controller Pattern im klassischen Sinne setzt auf die in der folgenden Abbildung gezeigten drei Komponenten auf, die je nach Implementierung unterschiedlich stark voneinander abhängen.













Entsprechend lassen sich auch die Aufgaben der einzelnen Komponenten recht abstrakt formulieren:

Model - Die Datengrundlage für die - wie auch immer geartete - Umsetzung des MVC Patterns, findet sich im Model wieder. Diese Komponente könnte man ohne weiteres als den unabhängigsten Part der Drei bezeichnen, da es keinerlei Kenntniss von Schnittstellen den anderen Komponenten besitzt, so geschieht die Bekanntgabe von Änderungen der Datengrundlage hier auch nach dem Observer-Pattern. Das Model führt Manipulationen der Daten auf Anfrage durch.

View - Erst einmal findet hier die Präsentation der relevanten Daten aus dem Model statt, über deren Änderungen sie mittels Anwendung des Observer Patterns informiert wird. Jede View besitzt damit quasi ihr eigenes Model. Weiterhin besitzt die View auch Kenntniss der Schnittstellen Ihrer zugehörigen Controller, da Sie für die Entgegennahme und Weitergabe von Benutzerinteraktionen an Diese verantwortlich ist. Eine Verarbeitung von durch Benutzer übergebenen Daten findet in der View nicht statt. Views Verwenden das Composite-Pattern.

Controller - Als Herzstück der MVC Komponenten verwaltet der Controller 1-n Views. Dazu gehört u.a. das Entgegennehmen und Verarbeiten der eintreffenden Benutzerinteraktionen und die daraus möglicherweise resultierenden Änderungen am Model der View anzustoßen. Außerdem besitzt die Steuerung Mechanismen um die Interaktionsmöglichkeiten der zugehörigen Views einzuschränken.

Anmerkung: Controller und View werden nach dem Strategy Pattern verwendet, wobei der Controller die Strategy (den Algorithmus) bildet.

Das ist die theoretische Grundlage auf der die diversen Implementierungen dieses Patterns mehr oder weniger genau aufsetzen. Gerade im Kontext der Design Pattern gibt es eine Vielzahl von Implementierungsansätzen rund um MVC die sich Eigenheiten von Programmiersprachen zu eigen machen oder einfach durch ihr Einsatzfeld als GUI Framework oder Web-basiertes Frameworks unterschiedliche Lösungsansätze verfolgen. Der Problemlösungsansatz des MVC Pattern wird dabei jedoch von all diesen Varianten verfolgt.

Einige konkrete Beispiele zu Implementierungen rund um das MVC Pattern und weitere Infos folgen im 2. Teil ... to be continued


Sonntag, 19. Juli 2009

Was sind Patterns

Was wäre der Softwareentwickler oder –architekt ohne seine Patterns!? Na zumindest kein besonders gutes Exemplar seiner Zunft wenn ihr mich fragt … denn Entwurfsmuster sollten - aus diversen Gründen - ein integraler Bestandteil Ihres Handwerkszeugs sein. Warum das so ist wird hoffentlich am Ende dieses kleinen Artikels deutlich.
Naja … zumindest sollte das Interesse der Leute geweckt sein, sich doch etwas näher mit dem Thema auseinander zu setzen. :)

Grundsätzlich gibt es eine Vielzahl von Mustern (Patterns) im Umfeld der Softwareentwicklung, die alle eine mehr oder weniger relevante Rolle spielen. Man unterscheidet
  • Analysemuster
  • Architekturmuster
  • Entwurfsmuster
  • Antimuster

wobei Entwurfsmuster (und Architekturmuster) den eigentlichen Kern unserer Betrachtungen bilden.

Entwurfsmuster oder auch Patterns oder auch Design Patterns … egal wie man sie bezeichnet, sie erfüllen ein und denselben Zweck, sie bilden bewährte Lösungsansätze für wiederkehrende Entwurfsprobleme und typische Aufgaben im Umfeld des Softwareentwicklungsprozesses.
Dabei gibt es häufig eine grundlegende Kategorisierung der Entwurfsmuster anhand Ihres Problemlösungsansatzes:

  • Erzeugende Muster (creational patterns) - Kontrolle über Objekterzeugung, Objekterzeugungsmechanismen
  • Strukturelle Muster (structural patterns) - Kombination von Klassen und Objekten zur Bildung größerer Strukturen
  • Verhaltensmustern (behavioral patterns) - Definition von Kommunikation zwischen Objekten und Kommunikationsfluss
  • sonstige Muster

Wer bestimmt nun was ein Design Pattern ist und was nicht bzw. welche wesentlichen Merkmale machen ein Entwurfsmuster zu einem Solchen!?
Die Frage nach dem „Wer“ ist wohl eher zweitrangig, denn mit dem Erfolg bzw. den offensichtlichen Vorteilen eines Entwurfsmusters kommt auch dessen Verbreitung durch die Community.
Die positiven Merkmale eines Patterns sind das was es ausmacht, jedoch sind diese auch immer abhängig von der Problemstellung und den Randbedingungen. Es lassen sich schnell einige Merkmale aufzählen, welche die Lösungen von Aufgaben mit Hilfe von Design Patterns prägen:

  • gute Wiederverwendbarkeit
  • besondere Performance
  • gute Skalierbarkeit
  • schnell lösbar

Das sollte erst einmal einen ganz guten (Kurz-)Überblick geben was Patterns sind, wie man sie unterscheidet und wofür sie gut sind. Ich möchte aber auch darauf aufmerksam machen, dass man mit solchen Entwurfsmustern auch vorsichtig umgehen sollte … denn nicht immer ist man mit der Anwendung von Pattern gut beraten. Wie in vielen Bereichen des Lebens gilt auch hier: „Nicht immer gleich mit Kanonen auf Spatzen feuern!“ - Overengineering hat erfahrungsgemäß selten positive Ergebnisse gebracht.

Wer mehr über Entwurfsmuster/Patterns wissen möchte, der kann sich gerne weiter mit einigen der Quellen beschäftigen, die ich zu meiner Vorbereitung genutzt habe:

Anmerkung:
Gut … ich weiß dass ich mit der obigen Verallgemeinerung bereits eine Steilvorlage für die Leute gebe, die sich intensiver mit dem Thema befassen und sicher auch ein viel tieferes Wissen als ich besitzen … aber ich denke zum grundlegenden Verständnis sollte das erst einmal reichen.

Patterns – Problemlösung nach Anleitung

Eigentlich wollte ich ja mittlerweile mal mein erstes Tutorial hier in meinem Blog präsentiert haben … aber naja, es hat mich mit den gegebenen Mitteln doch leider etwas Nerven gekostet daran zu arbeiten und ich bin nicht so voran gekommen wir ich eigentlich gerne wollte. Da ich wohl noch ein wenig länger brauche um das angedachte Tutorial vernünftig aufzubereiten werde ich mich parallel mal einem mir sehr wichtigen Thema widmen.

Nun weiß ich ja dass sich im Web, in Büchern und in jeder Menge anderer Medien bereits ausführlich mit dem Thema „Patterns & Best Practices“ beschäftigt wird … aber ich denke einfach dass eine große Menge an Publikationen und die unterschiedliche Aufbereitung die Chancen erhöhen, dass mehr Leute dieses Mittel nutzen.

Ich will versuchen auf meine Art das Thema „Patterns & Best Practices“ aufzubereiten und neben einem grundlegenden Einblick auch einige der bekanntesten und beliebtesten Beispiele mal etwas näher beleuchten. Meine Quellen und Inspirationen gibt’s dann immer on top :)

Agenda
  1. Was sind Patterns
  2. Das MVC Pattern - Teil 1
  3. Das MVC Pattern - Teil 2 (Comin' soon ...)
  4. Das Singleton Pattern (Comin' soon ...)
  5. Das Factory Pattern (Comin' soon ...)
  6. Das Facade Pattern (Comin' soon ...)
  7. ...

Freitag, 10. Juli 2009

Silverlight 3 ist endlich da!

So ... nun ist es endlich geschafft :) ... Silverlight 3 ist ja nun offiziell verfügbar und bring ein paar sehr leckere neue Features mit!
Bevor ich jetzt anfange als x-ter Blogger dieses Thema auszuweiden mache ich es mir einfach und verweise auf einen meiner Favorites an BLOGs der die wesentlichsten Features recht gut beleuchtet ... also schaut euch mal Scott Guthrie's Blog zu dem Thema an!

Wem das nicht reicht oder wer net so auf Englisch steht, der kann auch einfach mal bei heise vorbei schauen ... auch wenn es da nicht ganz so ausführlich zur Sache geht ;)

Eine Sache die im Zusammenhang taucht immer wieder auf ... IIS Smooth Streaming bzw. allgemein die IIS Media Services! Für alle die schon immer über On-Demand und Live Streaming nachgedacht haben - es aber aufgrund mangelnder Hardware nie angegangen sind - damit "Werden Sie geholfen!"

Ich werd zu dem Thema mal demnächst nen Post aufmachen ... nur schon soviel vorab ... es ist einfach, es macht Spass ... ES LOHNT SICH! :)

Prozessoptimierung mal anders

Die beiden Jungs haben sich da echt was geniales ausgedacht ... wenn das Leben doch immer so "simpel" wäre :)