341 lines
13 KiB
TeX
341 lines
13 KiB
TeX
|
|
\section{Einführung}
|
|
\label{sec:orgdb3f13c}
|
|
|
|
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.
|
|
|
|
\section{Ziele}
|
|
\label{sec:orgf2b95aa}
|
|
|
|
Aus der Aufgabenstellung lassen sich folgende Ziele an die Systeme ableiten.
|
|
|
|
|
|
\begin{itemize}
|
|
\item Die Datenbank wird in SQL Server umgesetzt.
|
|
\item Als Programmiersprache wird C\# mit .NET Framework eingesetzt.
|
|
\item Hotels können ihre Zimmer inklusive Zusatzinformationen wie Ausstattung etc.
|
|
erfassen.
|
|
\item Flüge werden in der Datenbank gespeichert.
|
|
\item Die Kombiangebote werden auf der Plattform in der Datenbank gespeichert.
|
|
\item Ein WinForm/WPF Client greift auf die Plattform zu und ruft die Kombiangebote
|
|
ab.
|
|
\item Der Client kann Kombiangebote buchen.
|
|
\item Der Client kann Kombiangebote für 10 Tage reservieren.
|
|
\item Die Plattform bucht bezahlte Reservationen fix.
|
|
\item Es müssen mehrere Fluggesellschaften angebunden werden.
|
|
\item 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.
|
|
\item Es dürfen nur freie Flüge in Kombiangeboten vorkommen.
|
|
\item Start- und Zielort des Fluges im Kombiangebot müssen passend zum Hotelzimmer
|
|
sein.
|
|
\item Die Daten des Fluges müssen korrekt sein.
|
|
\end{itemize}
|
|
|
|
\section{Analyse}
|
|
\label{sec:orge638b06}
|
|
|
|
Aufgrund der Ziele wurden anschliessend folgende Diagramme ausgearbeitet.
|
|
|
|
\subsection{Verteilungsdiagramm}
|
|
\label{sec:org4a69d10}
|
|
|
|
Das Verteilungsdiagramm, Abbildung:(\ref{fig:org9b29fa0}), 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.
|
|
|
|
\newpage
|
|
\begin{landscape}
|
|
\begin{figure}[htbp]
|
|
\centering
|
|
\includegraphics[width=.9\linewidth]{pictures/verteilungsdiagramm.pdf}
|
|
\caption{\label{fig:org9b29fa0}
|
|
Verteilungsdiagramm}
|
|
\end{figure}
|
|
\end{landscape}
|
|
\newpage
|
|
|
|
\subsection{Relationales Modell}
|
|
\label{sec:org14bf1bc}
|
|
|
|
Das relationale Modell, Abbildung:(\ref{fig:org54ab668}), wurde durch den Studenten vor gängig
|
|
zur Umsetzung erstellt. In der Abbildung:(\ref{fig:org8d1bc2d}) 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.
|
|
|
|
\newpage
|
|
\begin{landscape}
|
|
\begin{figure}[htbp]
|
|
\centering
|
|
\includegraphics[width=.9\linewidth]{pictures/rm.pdf}
|
|
\caption{\label{fig:org54ab668}
|
|
Relationen Modell}
|
|
\end{figure}
|
|
\end{landscape}
|
|
\newpage
|
|
|
|
\newpage
|
|
\begin{landscape}
|
|
\begin{figure}[htbp]
|
|
\centering
|
|
\includegraphics[width=.9\linewidth]{pictures/rmentity.png}
|
|
\caption{\label{fig:org8d1bc2d}
|
|
Relationen Modell}
|
|
\end{figure}
|
|
\end{landscape}
|
|
\newpage
|
|
|
|
\section{Zugewiesene Ziele}
|
|
\label{sec:org36a3104}
|
|
|
|
Im Anschluss zu der Analyse hat der Student die Ziele den einzelnen
|
|
Applikationen zugewiesen. Dies sollte dazu dienen die Zuständigkeiten zu regeln.
|
|
|
|
\subsection{Airline Service}
|
|
\label{sec:org967e670}
|
|
|
|
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.
|
|
|
|
\label{airline}
|
|
\begin{sexylisting}{Airline Service}
|
|
[OperationContract]
|
|
Dictionary<string, List<Flight>> GetFlights(
|
|
DateTime startTime,
|
|
DateTime endTime,
|
|
string destination,
|
|
int numberOfSeats);
|
|
[OperationContract]
|
|
Flight BookFlight(Flight flight, int numberOfSeats);
|
|
[OperationContract]
|
|
Flight CancelFlight(Flight flight, int numberOfSeats);
|
|
\end{sexylisting}
|
|
\newpage
|
|
Somit wurden dem Airline Service folgende Ziele zugewiesen:
|
|
\begin{itemize}
|
|
\item Es dürfen nur freie Flüge in Kombiangeboten vorkommen.
|
|
\item Start- und Zielort des Fluges im Kombiangebot müssen passend zum Hotelzimmer
|
|
sein.
|
|
\item Die Daten des Fluges müssen korrekt sein.
|
|
\end{itemize}
|
|
|
|
\subsection{Plattform}
|
|
\label{sec:orgbf967a7}
|
|
|
|
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:
|
|
\begin{itemize}
|
|
\item Die Datenbank wird in SQL Server umgesetzt.
|
|
\item Hotels können ihre Zimmer inklusive Zusatzinformationen wie Ausstattung etc.
|
|
erfassen.
|
|
\item Flüge werden in der Datenbank gespeichert.
|
|
\item Die Kombiangebote werden auf der Plattform in der Datenbank gespeichert.
|
|
\item Ein WinForm/WPF Client greift auf die Plattform zu und ruft die Kombiangebote
|
|
ab.
|
|
\item Der Client kann Kombiangebote buchen.
|
|
\item Der Client kann Kombiangebote für 10 Tage reservieren.
|
|
\item Die Plattform bucht bezahlte Reservationen fix.
|
|
\item Es müssen mehrere Fluggesellschaften angebunden werden.
|
|
\item 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.
|
|
\item Start- und Zielort des Fluges im Kombiangebot müssen passend zum Hotelzimmer
|
|
sein.
|
|
\end{itemize}
|
|
|
|
Die Signatur des Plattform Services ist im Codebeispiel:(\ref{plattform}) zu
|
|
sehen.
|
|
|
|
\label{plattform}
|
|
\begin{sexylisting}{Plattform Service}
|
|
[OperationContract]
|
|
List<SpecialOffer> GetSpecialOffers();
|
|
[OperationContract]
|
|
bool ReserveSpecialOffer(SpecialOffer offer);
|
|
[OperationContract]
|
|
bool BookSpecialOffer(SpecialOffer offer);
|
|
[OperationContract]
|
|
bool CancelSpecialOffer(SpecialOffer offer);
|
|
[OperationContract]
|
|
List<Gender> GetGenders();
|
|
[OperationContract]
|
|
List<Salutation> GetSalutations();
|
|
[OperationContract]
|
|
List<City> GetCities();
|
|
\end{sexylisting}
|
|
|
|
\subsection{WPF Client}
|
|
\label{sec:orgd974396}
|
|
|
|
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:(\ref{fig:org91c1dd3}) und (\ref{fig:orgc096aff}),
|
|
zeigen einen frühen Stand des Clients.
|
|
|
|
\begin{figure}[htbp]
|
|
\centering
|
|
\includegraphics[width=.8\textwidth]{pictures/wpf1.png}
|
|
\caption{\label{fig:org91c1dd3}
|
|
Screenshot des Client Hauptfensters}
|
|
\end{figure}
|
|
|
|
\begin{figure}[htbp]
|
|
\centering
|
|
\includegraphics[width=6cm]{pictures/wpf2.png}
|
|
\caption{\label{fig:orgc096aff}
|
|
Screenshot der Kundendateneingabeform}
|
|
\end{figure}
|
|
|
|
\section{Offene Punkte}
|
|
\label{sec:org49618f0}
|
|
|
|
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.
|
|
|
|
\subsection{Airline Service}
|
|
\label{sec:org928bde7}
|
|
|
|
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.
|
|
|
|
\subsection{Plattform}
|
|
\label{sec:orgbd6a22f}
|
|
|
|
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.
|
|
|
|
\begin{verbatim}
|
|
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]
|
|
\end{verbatim}
|
|
|
|
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:(\ref{fig:orga9e5c58}), 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:(\ref{fig:orga543285}), erfasst werden. Gleiches gilt auch für das Hotel,
|
|
Abbildung:(\ref{fig:org3a14ab5}).
|
|
|
|
\begin{figure}[htbp]
|
|
\centering
|
|
\includegraphics[width=5cm]{pictures/selection.png}
|
|
\caption{\label{fig:orga9e5c58}
|
|
Screenshot der Raumeingabeform}
|
|
\end{figure}
|
|
|
|
\begin{figure}[htbp]
|
|
\centering
|
|
\includegraphics[width=5cm]{pictures/roomtype.png}
|
|
\caption{\label{fig:orga543285}
|
|
Screenshot der Raumtyp Erstellungsform}
|
|
\end{figure}
|
|
|
|
\begin{figure}[htbp]
|
|
\centering
|
|
\includegraphics[width=5cm]{pictures/hotel.png}
|
|
\caption{\label{fig:org3a14ab5}
|
|
Screenshot der Hotel Erstellungsform}
|
|
\end{figure}
|
|
|
|
|
|
Bei der Plattform noch offene Punkte sind:
|
|
\begin{itemize}
|
|
\item Der Plattform Service ist mangels eines passenden Clients komplett
|
|
ungetestet. Somit ist unklar, ob die Buchung oder Reservationen der
|
|
Kombiangebote funktionieren.
|
|
\item Flüge und ihre Randdaten werden in der Datenbank gespeichert.
|
|
\item Kombiangebote werden in der Datenbank gespeichert.
|
|
\item Zu buchende/stornierende Flüge werden an die Fluggesellschaften gemeldet.
|
|
\item 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.
|
|
\item Bezahlte Reservationen werden fix gebucht.
|
|
\end{itemize}
|
|
|
|
\subsection{WPF Client}
|
|
\label{sec:orga9fb630}
|
|
|
|
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.
|
|
|
|
\section{Fazit}
|
|
\label{sec:org9560ca2}
|
|
|
|
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.
|