oop_NFS_Andreas/docs/normfallstudie.org

13 KiB

Normfallstudie

Einführung

Aufgabe war es ein System aufzubauen, welches Hotelbetreibern und Fluggesellschaften auf einfach Weise Last Minute Angebote zu erstellen und auf den Markt zu bringen.

Das System sollte dann bei angeschlossenen Fluggesellschaften über einen WCF Service nach passenden Flügen suchen und diese Verbindung dann als ein Kombiangebot in der Datenbank speichern. Diese Kombiangebot sollte dann von einem Kunden mithilfe einer WinForm/WPF Applikation gebucht werden können.

Ziele

Aus der Aufgabenstellung lassen sich folgende Ziele an die Systeme ableiten.

  • Die Datenbank wird in SQL Server umgesetzt.
  • Als Programmiersprache wird C# mit .NET Framework eingesetzt.
  • Hotels können ihre Zimmer inklusive Zusatzinformationen wie Ausstattung etc. erfassen.
  • Flüge werden in der Datenbank gespeichert.
  • Die Kombiangebote werden auf der Plattform in der Datenbank gespeichert.
  • Ein WinForm/WPF Client greift auf die Plattform zu und ruft die Kombiangebote ab.
  • Der Client kann Kombiangebote buchen.
  • Der Client kann Kombiangebote für 10 Tage reservieren.
  • Die Plattform bucht bezahlte Reservationen fix.
  • Es müssen mehrere Fluggesellschaften angebunden werden.
  • Der Service wird innerhalb von 2s aufgebaut, läuft mindestens 30 Tage durch, bietet eine Verfügbarkeit von 0.995 und ist innerhalb von 0.5s ansprechbar.
  • Es dürfen nur freie Flüge in Kombiangeboten vorkommen.
  • Start- und Zielort des Fluges im Kombiangebot müssen passend zum Hotelzimmer sein.
  • Die Daten des Fluges müssen korrekt sein.

Analyse

Aufgrund der Ziele wurden anschliessend folgende Diagramme ausgearbeitet.

Verteilungsdiagramm

Das Verteilungsdiagramm, Abbildung:(fig:verteilungsdiagramm), wurde im Unterricht ausgearbeitet. Der Klasse erschien es am sinnvollsten, wenn die Plattform als ASP.NET Applikation erstellt wird und somit auf dem IIS Web Server läuft. Da die Plattform das zentrale System ist, ist es für die Normfallstudie auch sinnvoll, wenn der Datenbank Server auf dem gleichen System läuft wie die Plattform. In einer realen Umgebung müsste hier allenfalls eine separater Server aufgesetzt werden. Der Airline Service und der WPF Client wurden entsprechend der Vorgaben als externe Applikationen geplant.

#+LATEX:≠wpage #+LATEX:\begin{landscape}

/ibz/oop_NFS_Andreas/src/commit/52bc7549838fefca030a527e4dbb4a78129ae8eb/docs/pictures/verteilungsdiagramm.pdf #+LATEX:\end{landscape} #+LATEX:≠wpage

Relationales Modell

Das relationale Modell, Abbildung:(fig:rm), wurde durch den Studenten vor gängig zur Umsetzung erstellt. In der Abbildung:(fig:rmentity) ist die das relationale Modell zu sehen welches, dann durch das Entity Framework effektiv in der Datenbank erstellt wurde. Wie man sieht, sind sich die beiden Diagramme sehr ähnlich. Entity Framework erstellt beim Code First Ansatz die Datenbank ziemlich genau so, wie man sie auch von Hand erstellen würde. Zumindest im Bezug auf die Tabellen.

#+LATEX:≠wpage #+LATEX:\begin{landscape}

/ibz/oop_NFS_Andreas/src/commit/52bc7549838fefca030a527e4dbb4a78129ae8eb/docs/pictures/rm.pdf #+LATEX:\end{landscape} #+LATEX:≠wpage

#+LATEX:≠wpage #+LATEX:\begin{landscape}

/ibz/oop_NFS_Andreas/media/commit/52bc7549838fefca030a527e4dbb4a78129ae8eb/docs/pictures/rmentity.png #+LATEX:\end{landscape} #+LATEX:≠wpage

Zugewiesene Ziele

Im Anschluss zu der Analyse hat der Student die Ziele den einzelnen Applikationen zugewiesen. Dies sollte dazu dienen die Zuständigkeiten zu regeln.

Airline Service

Da die Airlines alle Flugdaten zur Verfügung haben erschien es sinnvoll das diese einen Service bereitstellen, welcher die Parameter Anzahl Passagiere, Start- und Enddatum sowie die Destination aufnimmt. Der Service sollte dann im Hintergrund automatisch die bereits besetzten Flüge und Flüge, welche nicht auf die restlichen Parameter passen ausfiltern und nur passende Flüge ausgeben.

Des Weiteren sollte der Airline Service eine Möglichkeit bieten Flüge zu buchen sowie zu stornieren. Im Code Ausschnitt:(\ref{airline}) sieht man die Signatur des Airline Services. Respektive des Interfaces davon.

Somit wurden dem Airline Service folgende Ziele zugewiesen:

  • Es dürfen nur freie Flüge in Kombiangeboten vorkommen.
  • Start- und Zielort des Fluges im Kombiangebot müssen passend zum Hotelzimmer sein.
  • Die Daten des Fluges müssen korrekt sein.

Plattform

Die Plattform stellt den Grossteil der Logik und Funktionen bereit. Sie sollte einerseits eine Möglichkeit bieten damit die Hotelbetreiber Zimmer und ihre Hotels erfassen könne sowie das Matching zwischen Hotelzimmer und Flügen erledigen.

Zusätzlich sollte sie die erstellten Kombiangebote und den WPF Client weiterleiten können. Auch das Entgegennehmen der Bestellungen sowie Reservationen des WPF Clients entgegennehmen und an den Airline Service weiterleiten. Auch die Überprüfung der Reservationszeit sowie die entsprechende Reaktion war für die Plattform geplant.

Zu guter Letzt sollten dann die reservierten respektive gebuchten Flüge an die passende Airline zur Buchung weitergeleitet werden. Im Falle einer Stornierung des Angebots müsste dann natürlich auch noch der Flug storniert werden.

Der Plattform wurden somit folgende Ziele zugewiesen:

  • Die Datenbank wird in SQL Server umgesetzt.
  • Hotels können ihre Zimmer inklusive Zusatzinformationen wie Ausstattung etc. erfassen.
  • Flüge werden in der Datenbank gespeichert.
  • Die Kombiangebote werden auf der Plattform in der Datenbank gespeichert.
  • Ein WinForm/WPF Client greift auf die Plattform zu und ruft die Kombiangebote ab.
  • Der Client kann Kombiangebote buchen.
  • Der Client kann Kombiangebote für 10 Tage reservieren.
  • Die Plattform bucht bezahlte Reservationen fix.
  • Es müssen mehrere Fluggesellschaften angebunden werden.
  • Der Service wird innerhalb von 2s aufgebaut, läuft mindestens 30 Tage durch, bietet eine Verfügbarkeit von 0.995 und ist innerhalb von 0.5s ansprechbar.
  • Start- und Zielort des Fluges im Kombiangebot müssen passend zum Hotelzimmer sein.

Die Signatur des Plattform Services ist im Codebeispiel:(\ref{plattform}) zu sehen.

WPF Client

Der WPF Client sollte nur aus einem simplen graphischen Interface bestehen, welches einem User erlaubt hätte nach Städten und Daten zu filtern und ihm dann die entsprechenden Kombiangebote angezeigt hätte. Das gewünschte Angebot hätte er dann über den WCF Service auf der Plattform reservieren oder direkt buchen können. Die folgenden zwei Screenshots, Abbildung:(fig:wpf1) und (fig:wpf2), zeigen einen frühen Stand des Clients.

/ibz/oop_NFS_Andreas/media/commit/52bc7549838fefca030a527e4dbb4a78129ae8eb/docs/pictures/wpf1.png

/ibz/oop_NFS_Andreas/media/commit/52bc7549838fefca030a527e4dbb4a78129ae8eb/docs/pictures/wpf2.png

Offene Punkte

Aufgrund enormen Zeitmangels war es leider nicht möglich das Projekt zu realisieren. In dieser Sektion soll ein kurzer Überblick darüber gegeben werden, welche Punkte in welchem Teil des Projektes noch offen sind, nicht fertigstellt sind oder überhaupt angegangen werden konnten.

Airline Service

Soweit der Student dies zum jetzigen Zeitpunkt beurteilen kann ist der Airline Service soweit abgeschlossen. In ersten nicht dokumentierter Tests wurden zumindest die erwarteten Daten zurück geliefert.

Plattform

Aufgrund eines Bugs, welcher auch mit Hilfe des Dozenten nicht behoben werden konnte, ist es zurzeit nicht möglich die Plattform überhaupt zu starten. Das Provisionieren der Datenbank schlägt mit dem folgenden Fehler fehl.

MappingException: (6,10) : error 3004: Problem in mapping fragments
starting at line 6:No mapping specified for properties
Airline.ExtensionData in Set Airlines. An Entity with Key (PK) will
not round-trip when: Entity is type [Plattform.DB.Airline]
Plattform Error

Für die Abgabe wurde ein früherer Stand des Codes ausgecheckt, welcher jedoch insgesamt auch nicht so performt wie er sollte. Der Airline Service und die Plattform lassen sich jedoch starten.

Die Zimmererfassung, Abbildung:(fig:room), für die Hotels konnte zuvor jedoch soweit fertigstellt werden. Der Hotelbetreiber kann den Raumtypen und das Hotel auswählen, sowie die Daten angeben von wann bis wann der Raum frei ist. Sollte der Raumtyp nicht existieren kann er in einer separaten Form, Abbildung:(fig:roomtype), erfasst werden. Gleiches gilt auch für das Hotel, Abbildung:(fig:hotel).

/ibz/oop_NFS_Andreas/media/commit/52bc7549838fefca030a527e4dbb4a78129ae8eb/docs/pictures/selection.png

/ibz/oop_NFS_Andreas/media/commit/52bc7549838fefca030a527e4dbb4a78129ae8eb/docs/pictures/roomtype.png

/ibz/oop_NFS_Andreas/media/commit/52bc7549838fefca030a527e4dbb4a78129ae8eb/docs/pictures/hotel.png

Bei der Plattform noch offene Punkte sind:

  • Der Plattform Service ist mangels eines passenden Clients komplett ungetestet. Somit ist unklar, ob die Buchung oder Reservationen der Kombiangebote funktionieren.
  • Flüge und ihre Randdaten werden in der Datenbank gespeichert.
  • Kombiangebote werden in der Datenbank gespeichert.
  • Zu buchende/stornierende Flüge werden an die Fluggesellschaften gemeldet.
  • Der Service wird innerhalb von 2s aufgebaut, läuft mindestens 30 Tage durch, bietet eine Verfügbarkeit von 0.995 und ist innerhalb von 0.5s ansprechbar.
  • Bezahlte Reservationen werden fix gebucht.

WPF Client

Vom WPF Client existiert zurzeit nur das Grundgerüst. Da die Plattform nicht funktionsfähig war, hat der Student am WPF Client gearbeitet soweit es möglich war. Allerdings war dies ohne den WCF Service der Plattform nur sehr beschränkt möglich. Viel mehr als die grafische Oberfläche existiert zurzeit nicht.

Fazit

Ein Booking System welches Kombiangebote wie in der Aufgabenstellung verlangt bereitstellt ist eine unglaublich komplexes System. Das Matching der Flüge zu passenden Hotelzimmer hat enorm viele Variablen welche berücksichtigt werden müssen. Auch das Zusammenspiel des Clients zur Plattform bietet durchaus einige Knackpunkte.

Dadurch lässt sich das Projekt in keiner Weise innerhalb von ca. 20 Stunden erstellen. Der Student hat bereits weit über 40 Stunden in das Projekt in Heimarbeit investiert und kein brauchbares Ergebnis erzielen können. Für den Studenten ist dies eine enorm unbefriedigende Situation.

Das .NET und Entity Framework bieten einige interessante Features. Allerdings wirkt der Code-First Ansatz von Entity Framework so, als ob die ganzen Überprüfungen in der Applikation gemacht werden sollten anstatt in der Datenbank. Allenfalls ist das noch eine Altlast von früher. Heutzutage gibt es Frameworks die dies wesentlich eleganter lösen. Der Student findet dass, das Framework die Datenbank so sauber wie möglich erstellen sollte und es dem Entwickler möglichst einfach machen sollte erweiterte Features der Datenbank zu nutzen.

Auch empfindet der Student C# eher als ungeeignet um innerhalb von so kurzer Zeit ein Projekt zu realisieren Die Sprache fühlt sich dafür einfach zu sperrig an. Die zusätzliche Komplexität durch Visual Studio ist leider nicht immer nur eine Hilfe.

WCF Services sind in der Grundidee eine sehr interessante Technologie und der Student wird WCF Services oder ähnliche Technologien in der Zukunft sicher in Betracht ziehen. Insbesondere das Teilen der Klassen bietet interessante Möglichkeiten.