Fallstudie: Entwicklung einer Internet-Applikation
Start-Szenario und Zielsetzung
Zusätzlich zum Fallbeispiel einer Desktop-Applikation möchten wir Ihnen an dieser Stelle die Planung und Entstehung eines Internetprojekts vorstellen. Von cts projects&software wurden hierbei sämtliche Aufgaben rund um Programmierung und Datenbank durchgeführt.
Bei einem ersten Projekttreffen mit dem Kunden wurden uns die Erwartungen und Vorstellungen an das Internetprojekt dargelegt. Ziel war eine Börse, in der Auftraggeber (Private Haushalte und Unternehmen) Aufträge an Auftragnehmer (Freiberufler, Selbständige) vergeben können. Der Kunde fungiert hierbei als Mittler, für den sich das System durch Buchungen und den daraus resultierenden Provisionen rentieren soll. Ausdrücklicher Wunsch des Kunden ist die Möglichkeit der vollständigen Überwachung von Benutzeraktionen und die Schaffung von Rechtssicherheit für alle Seiten. Gleichzeitig fordert er eine Umsetzung der Idee in extrem kurzer Zeit.
Umsetzung durch cts projects&software
Durch cts projects&software wird zunächst ein Pflichtenheft erstellt, das den Umriss des Projekts darstellt und auch den genauen Leistungsumfang festlegt. Es wurde entschieden, das Projekt mit PHP5 zu realisieren und als Datenbanksystem MySQL zu nutzen. Ausschlaggebend für diese Form der Umsetzung war es, dass die Applikation portabel auf verschiedenen Webservern eingesetzt werden kann und PHP5 eine Vielzahl von neuen Möglichkeiten bietet, welche eine objektorientierte Programmierung begünstigt. Zum Beispiel ist es mit PHP5 möglich, Entwicklungsmuster zu nutzen, die eine standardisierte Programmierung und Erweiterung deutlich vereinfachen.
MySQL als Datenbank zu nutzen bringt viele Vorteile, was Portierbarkeit und Geschwindigkeit betrifft ohne auf Unterstützung von Transaktionen etc. verzichten zu müssen, wenn diese für Tabellen notwendig wird.
Grafiken und grafische Bearbeitungen werden durch einen externen Dienstleister durchgeführt.
Generelle Probleme von Webapplikationen
Webapplikationen unterscheiden sich in vielerlei Hinsicht von Desktop-Applikationen, auch wenn die Grenzen mehr und mehr verschwimmen. Eines der Hauptprobleme bei der Entwicklung von nicht trivialen und komfortablen Webapplikationen ist in der Historie des Hypertext-Protokolls (http) und der darauf basierenden Webserver begründet. Das Hypertext-Protokoll wurde als statusloses Protokoll entwickelt, welches jede Anfrage eines Clients (z.B. Abruf einer Webseite) als isolierten und abgeschlossenen Vorgang ansieht. Eine erneute Abfrage dieses Clients geschieht also immer völlig "frisch", d.h. der Server speichert keinerlei Informationen über den aktuellen Status des Clients.
Aus dem geschilderten Verhalten ergeben sich Probleme bei der "Wiedererkennung" eines Benutzers. Logt sich ein Benutzer auf einer Webseite ein, ist diese Anmeldung beim nächsten Aufruf einer Seite wieder vergessen. Dieses Verhalten kann und muss bei jeder Webentwicklung beachtet und notwendige Gegenmaßnahmen getroffen werden.
Ein weiteres Problemfeld bei Entwicklung und Betrieb von Webapplikationen ist die Sicherheit. Schlagworte wie "SQL-Injektion" und "Session-Hijacking" sind jedem Webentwickler aus leidvoller Erfahrung bekannt. Diese Techniken werden von Angreifern genutzt, um die Datenbank zu manipulieren oder sich als angemeldeter Benutzer mit seinen Rechten gegenüber der Webapplikation auszugeben. Bei der Entwicklung ist somit stets auf einen sauberen Programmierstil zu achten, der Angriffe dieser und anderer Art möglichst effizient abwehrt.
Eine Webapplikation steht und fällt mit der Performance. Um diese zu gewährleisten, ist es nicht nur erforderlich, einen geeigneten Webserver zu betreiben oder zu mieten, sondern auch konsequent die Webapplikation zu optimieren - insbesondere, wenn diese von vielen Menschen zur gleichen Zeit genutzt wird. Aus diesem Grunde muss sowohl bei der Planung und Entwicklung als auch im Teststadium konsequent darauf geachtet werden, diese "Flaschenhälse" zu erkennen und möglichst zu eliminieren.
Grundsätzliche Überlegungen und Konzepte
Nach der Planungsphase beginnt die Entwicklung des Projekts zunächst mit der Implementierung der Datenbankstruktur. Bei diesem Schritt wird die Datenbasis erstellt und in Tabellen relational-strukturiert dargestellt.
In einem nächsten Schritt beginnt die schichtweise Programmierung von Datenbankzugriff, der Business-Objekte und Business-Logik. Durch diese Aufteilung in einzelne, voneinander getrennte Zuständigkeitsbereiche ("Layer") gelingt es, eine Applikation schnell auf sich wandelnde Bedürfnisse einzurichten. Typische Fälle sind die Änderung der Datenbank oder die Umstellung der Geschäftsbedingungen, die an einer Stelle des Programms ("Business logic") zentral editiert und geändert werden können.
Durch die unbedingte Vorgabe einer kurzen Entwicklungszeit durch den Kunden wurde durch cts projects&software ein Konzept entwickelt, das zumindest teilweise auf bereits entwickelten Komponenten basiert. Durch diese Wiederverwendung war es möglich wertvolle Entwicklungszeit einzusparen, welche für andere Programmteile benötigt wurde und genutzt werden konnte. In der Regel werden diese Programmteile in einem oder mehreren Objekten gekapselt - z.B. Objekte zum Datenbankzugriff, E-Mail-Versand etc. sind prädestiniert für eine Wiederverwendung in mehreren Projekten.
Basis für die objektorientierte Entwicklung sind im Wesentlichen die Objekte Auftraggeber und Auftragnehmer und das Objekt Termine. Jeder Auftragnehmer und Auftraggeber hat die Möglichkeit eine beliebige Anzahl von Terminen ("freie Kapazitäten") in der Datenbank zu veröffentlichen. Diese freien Kapazitäten oder Gesuche können jeweils durch die Gegenseite gebucht werden, wodurch ein rechtsverbindlicher Vertrag zu Stande kommt. Jedes der im Programm definierten Objekte versucht seine Daten und Funktionen, in Anlehnung an seine Aufgaben in der realen Welt, zu kapseln und an einer Stelle zusammenzuführen.