Skip to content

Commit ff92621

Browse files
Finish analysis
1 parent 33d40b2 commit ff92621

File tree

8 files changed

+58
-9
lines changed

8 files changed

+58
-9
lines changed

images/generics.pdf

56.4 KB
Binary file not shown.

images/repository.pdf

31.8 KB
Binary file not shown.

images/tla.drawio

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
<mxfile host="Electron" modified="2021-01-31T09:02:55.056Z" agent="5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/13.3.1 Chrome/83.0.4103.119 Electron/9.0.5 Safari/537.36" etag="ZKHLKzJDtu1W9pibl0Ok" version="13.3.1" type="device"><diagram id="PGyRKlUREU_5g-chNvty" name="Page-1">7VrdbpswGH0aLpmCyQ+9bGjXblq3Skm7y8kFB7waGxmnSfb0+2gMCZB0WUcaayWVKudgY3O+cwwnieX6yfJK4jS+ESFhFuqFS8u9sBAaeR78z4HVGhgMR2sgkjRcQ84GmNBfRIM9jc5pSLJKRyUEUzStgoHgnASqgmEpxaLabSZYddYUR6QBTALMmuh3Gqq4WF2vtzlwTWgUq/qRBBe9NZDFOBSLLci9tFxfCqHWrWTpE5aTVxCzHvdxz9FyZZJwdciAz3Ymwx+PX7xgaQ/vv2bi7Nq39VmeMJvrK9aLVauCglglDFqO5Y5DKdIplhHJJ+wBoEcTqchy77Kc8mJBJUQkRMkVdNED0FDzoxXiFHwtNnz3PY3FW1S7ZxrEusZRee4NC9DQRPwFKejPpEAx07wZiCQV/PlSxz+JUqtCJV4BlOroH8rX/kLtJdFpUIZ2MFZgkjCs6FNV4rtY1PPdCgprKyez0ahSsVH1BGI2y0Ag9SKUi359XdwddRmynPosxRzaUd62fGSdj8/TlNEALlPwHBiPi64wc6W3hh9kAymAb3fT27vphwuYsAen3TrRw2ZMTR9Q3xzf8k6mpHgkvmBCAsJBNADOKGM1CDMa8VxZoAcC+DhXC1wJO9cHEhqG+TTjRUwVmaQ4yOdcwPYLmBRzHpKwPXv23Zo9+017llhc2QmP5M5+UwXPFfdLK1bq/UJhfdjmeYjlQRU98jbY4Nk7kOfRsXgeGLgL9rtd0B62p3+RJIL/s/q3NzELubNB/tfY8eDI8PmVjxBcbeHrVzs+GnhVH/V3PE68rY9GBvpo2PnI9lrz0RVOiIn3kPLR+mTaPzNQ+16nfbt4OGtB/DeCUyUk5ZEJFkCeaRZwDojYb58mey+y+E5MsCPnv9YE+LBYeGT11x9+DFD/rsx+cvWjTv22016OvhZmPv+4h35WcTz5mxiinS5FAwntxehJgDkn0gQH1G8ABjjAxPjrdPkXSGgvAE/neQLAzEQLnP6DVMfEFOx0Mdi3i/W3YYEFVcqMm0A9A5/eAcjEDLz1Jfw7dkB7GXgC/TMhMxMtcPpvAZCJQRh1QRhIaC8If+IzYaL8Tx8DkIlBGHVBGEhoLwhfYIUfcGbkZ0EG3AFMTMLo/07C8HbzA8t1983PVN3L3w==</diagram></mxfile>

images/tla.pdf

52.7 KB
Binary file not shown.

images/wrapper.pdf

30.7 KB
Binary file not shown.

sections/analyse.tex

Lines changed: 50 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,60 @@ \section{Ermittlung einer Dialoglandkarte}
88

99
\begin{figure}[H]
1010
\includegraphics[width=\linewidth, bb=0 0 2123 2002]{mindmap.pdf}
11-
\caption{Die erstellte Dialoglandkarte zur bestehenden Version der iOS App zeigt die Navigationswege innerhalb der App, sowie die genutzten UI-Elemente.}\label{fig:swiftui}
11+
\caption{Die erstellte Dialoglandkarte zur bestehenden Version der iOS App zeigt die Navigationswege innerhalb der App, sowie die genutzten UI-Elemente.}\label{fig:mindmap}
1212
\end{figure}
1313

14-
Die in \Cref{fig:swiftui} gezeigte Dialoglandkarte suggeriert bereits die verschiedenen Gruppierungen von Ansichten, welche wir später zur Erstellung von neuen Packages heranziehen konnten. Zu sehen ist beispielsweise, dass die Spiel-Ansichten, der Einführungsassistent, oder bspw. auch die Kalender-Ansicht bereits gut voneinander separierbar sind. Die aufgezeichneten Navigationspfeile zwischen den Ansichten konnten genutzt werden, um die Datenflüsse hierbei vor der Erstellung des Konzeptes besser zu verstehen und die jeweils hierfür am Besten geeigneten Patterns zu finden.
14+
Die in \Cref{fig:mindmap} gezeigte Dialoglandkarte suggeriert bereits die verschiedenen Gruppierungen von Ansichten, welche wir später zur Erstellung von neuen Packages heranziehen konnten. Zu sehen ist beispielsweise, dass die Spiel-Ansichten, der Einführungsassistent, oder bspw. auch die Kalender-Ansicht bereits gut voneinander separierbar sind. Die aufgezeichneten Navigationspfeile zwischen den Ansichten konnten genutzt werden, um die Datenflüsse hierbei vor der Erstellung des Konzeptes besser zu verstehen und die jeweils hierfür am Besten geeigneten Patterns zu finden.
1515

1616
\section{Struktur des Couchbase-Datenbank-Frameworks}
1717

18+
Die Persistierung der Applikationen kann über verschiedene Frameworks geschehen, iOS bietet standardmäßig bereits eine sehr rudimentäre Persitenzschnittstelle unter \texttt{UserDefaults}, auf Android analog hierzu \texttt{SharedPreferences}. Da jedoch nicht nur eine größere Anzahl an Daten persistiert werden müssen (Sponsoren, Spieldaten, Kalenderereignisse, Heatmap uvm.), sondern diese auch mit einem Server-Backend nach dem Offline-First-Prinzip synchronisiert werden sollen, kommen nur wenige fortgeschrittene Persistenz-Frameworks in Frage. Ehemals nutzten die Apps eine Realm-Datenbank, welche wegen externer Konditionen jedoch nicht mehr in Frage kam. Daher wurde ein Couchbase-Framework erstellt, inklusive eines Server-Backend-Systems, welches einen Synchronisationsservice und unter anderem auch einen Registrationsservice umfasst.
1819

20+
\begin{figure}[H]
21+
\includegraphics[width=\linewidth, bb=0 0 396 161]{wrapper.pdf}
22+
\caption{Eine Übersicht über das zu integrierende Couchbase-Framework. Über eine abstrahierende Wrapper-Programmierschnittstelle wird auf die Datenbank zugegriffen.}\label{fig:wrapper}
23+
\end{figure}
24+
25+
Die Metastruktur des Frameworks ist in \Cref{fig:wrapper} gezeigt. Um die Nutzung von Couchbase zu vereinfachen, wurde das Framework in eine abstrahierende Wrapper-Programmierschnittstelle eingebunden, welche die wichtigsten CRUD-Operationen, On-Change-Listener und auch die Synchronisationskomponente (Replikator) bereitstellt.
26+
27+
\begin{figure}[H]
28+
\includegraphics[width=\linewidth, bb=0 0 491 153]{repository.pdf}
29+
\caption{Das Couchbase-Framework kapselt die Datenmodelle in voneinander separierte Repositories, auf denen unter anderem grundlegende CRUD-Operationen möglich sind.}\label{fig:repository}
30+
\end{figure}
31+
32+
\Cref{fig:repository} illustriert, wie die Datenmodelle der Applikation geschrieben und gelesen werden können. Die Repository-Schnittstelle des jeweiligen Datenmodells bietet die dazugehörigen Funktionalitäten an.
33+
34+
\begin{figure}[H]
35+
\includegraphics[width=\linewidth, bb=0 0 439 179]{generics.pdf}
36+
\caption{Die Repository-Schnittstelle wird generisch durch das Datenmodell und das dazugehörige Repository erzeugt. Der Änderungsaufwand bei einer Änderung des Datenmodells ist somit sehr gering und neue Datenmodelle können ohne größeren Aufwand hinzugefügt werden.}\label{fig:generics}
37+
\end{figure}
38+
39+
Wie in \Cref{fig:generics} gezeigt, werden die Repositories vom Framework generisch inferiert und anschließend in Form von standardisierte Schnittstellen bereitgestellt. Die diesen Schnittstellen zugrunde liegenden Datenbankabfragen müssen somit in der App nicht implementiert werden. Gleichzeitig kann das Datenbank-Backend bei Fortbestehen der Schnittstellen auch im Hintergrund ausgetauscht werden, ohne Änderungen in der App zu bedingen.
40+
41+
\section{Top-Level-Architektur und Muss-Kriterien}
42+
43+
Auf Grundlage der erstellten Dialoglandkarte sowie der bekannten Datenbankstruktur des Couchbase-Frameworks wurde ein Top-Level-Architektur-Modell (TLA) erstellt, um die Applikation in voneinander weitestgehend unabhängige Teilbereiche zu separieren.
44+
45+
\begin{figure}[H]
46+
\includegraphics[width=\linewidth, bb=0 0 347 282]{tla.pdf}
47+
\caption{Die TLA der Applikation im Überblick.}\label{fig:tla}
48+
\end{figure}
49+
50+
Wie in \Cref{fig:tla} zu sehen, wurde die Applikation in 12 Komponenten unterteilt. Im folgenden werden die zu diesen Komponenten gehörenden Muss-Kriterien erläutert:
51+
52+
\begin{itemize}
53+
\item \textbf{Twitter} stellt alle Feed-Funktionalitäten bereit, inklusive der Feed-Ansicht und der Möglichkeit, neue Tweets zu erstellen.
54+
\item \textbf{Calendar} realisiert die Kalender-Ansicht des Veranstaltungsplans, inklusive der Detailansichten zu den jeweiligen Ereignissen, einer Möglichkeit, Ereignisse zu favorisieren, sowie nach bestimmten Ereigniskategorien zu filtern und zu suchen.
55+
\item \textbf{Tutorial} stellt alle Funktionalitäten und Ansichten des Einführungsassistenten bereit, welcher die wesentlichsten Bestandteile der App kurz erläutert.
56+
\item \textbf{Monitoring} kapselt die Crowd-Monitoring-Funktionalitäten des externen Crowd-Monitoring-Frameworks, sowie die Ansichten, die zur Erklärung und Steuerung dessen notwendig sind.
57+
\item \textbf{Game} ist die funktionell mächtigste Komponente, da sie alle Ansichten und Funktionalitäten der Gamification beinhaltet, darunter die Spielerregistrierung, die Trophäen- und Errungenschaften-Ansichten, die Fortschrittsansicht, die Rangliste sowie die Eroberungs-Ansicht.
58+
\item \textbf{Map} beinhaltet die Kartenansichten, darunter die Möglichkeiten der Auswahl bestimmter Etagen und Ansichtsoptionen wie die aktuellen Eroberungen oder die Anzeige des Besucheraufkommens über die Heatmap.
59+
\item \textbf{Info} stellt wichtige informative Ansichten bereit, darunter die Danksagungen und Lizenzen, aber auch Link-Ansichten zu Datenschutzerklärung und Impressum.
60+
\item \textbf{Home} dient als Verbinder zwischen verschiedenen Ansichten durch die Bereitstellung einer Home-Ansicht, auf der verschiedene Teilansichten und Links anderer Komponenten gezeigt werden.
61+
\item \textbf{Scanner} realisiert die QR-Code-Scanner-Funktionalitäten, die benötigt werden, um Errungenschaften für das OUTPUT-Spiel freizuschalten.
62+
\item \textbf{Sponsors} ist verantwortlich für die Bereitstellung von Ansichten zur Anzeige von Sponsoren in der Home-Ansicht.
63+
\item \textbf{Database} stellt die zum Couchbase-Framework ergänzend benötigten Ansichten und Schnittstellen bereit.
64+
\item \textbf{Common} stellt Komponenten und Erweiterungen bereit, die in der gesamten Applikation benötigt werden, beispielsweise eine modulare Card-Ansicht, die sich im UI (siehe Dialoglandkarte) häufig wiederfindet.
65+
\end{itemize}
1966

67+
Diese TLA soll nachfolgend im Rahmen verschiedener Konzepte verfeinert und implementiert werden.

sections/grundlagen.tex

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ \chapter{Grundlagen}\label{ch:grundlagen}
44

55
\section{Swift und SwiftUI}
66

7-
Eine Festlegung, die bereits vor der Reimplementation der Apps getroffen wurde, ist die Wahl von Swift als Hauptprogrammiersprache der zu erstellenden iOS App. Die Programmiersprache wurde 2014 von Apple veröffentlicht und ersetzt seitdem Objective-C als die von Apple empfohlene Objektorientierte Sprache zur Erstellung von Applikationen für das Apple-Ökosystem mit den Betriebssystemderivaten Mac OS, iOS und bspw. auch Watch OS (Apple Watch). In der aktuellen Version 5 setzt Swift vielseitig etablierte Konzepte aus modernen Programmiersprachen um und ist hierbei nach dem subjektiven Empfinden des Projektteams leicht verständlich, schnell zu erlernen, sowie sehr kompakt. Zusammen mit Swift 5 wurde SwiftUI als deklaratives UI-Framework 2019 veröffentlicht, ergänzend zum herkömmlichen Constraint-basierten Layouting über UIView(Controller) und XIB/Storyboard-Dateien. SwiftUI orientiert sich an Frameworks wie React, bei denen Ansichten im Code definiert werden können, wodurch die Erstellung und Modifikation von Ansichten direkt im Editor geschehen kann, ohne die Notwendigkeit von etwaiger Controller-Logik, die UI-Elemente mit Code-Elementen (z.B. über die Annotation @IBAction) verbindet. Dies vereinfacht den Implementationsprozess, bringt jedoch auch verschiedene neue Architektur- und Datenflusskonzepte mit sich, die zunächst verstanden werden müssen, um SwiftUI effektiv und zielorientiert nutzen zu können.
7+
Eine Festlegung, die bereits vor der Reimplementation der Apps getroffen wurde, ist die Wahl von Swift als Hauptprogrammiersprache der zu erstellenden iOS App. Die Programmiersprache wurde 2014 von Apple veröffentlicht und ersetzt seitdem Objective-C als die von Apple empfohlene Objektorientierte Sprache zur Erstellung von Applikationen für das Apple-Ökosystem mit den Betriebssystemderivaten Mac OS, iOS und bspw. auch Watch OS (Apple Watch). In der aktuellen Version 5 setzt Swift vielseitig etablierte Konzepte aus modernen Programmiersprachen um und ist hierbei nach dem subjektiven Empfinden des Projektteams leicht verständlich, schnell zu erlernen, sowie sehr kompakt. Zusammen mit Swift 5 wurde SwiftUI als deklaratives UI-Framework 2019 veröffentlicht, ergänzend zum herkömmlichen Constraint-basierten Layouting über UIView(Controller) und XIB/Storyboard-Dateien. SwiftUI orientiert sich an Frameworks wie React, bei denen Ansichten im Code definiert werden können, wodurch die Erstellung und Modifikation von Ansichten direkt im Editor geschehen kann, ohne die Notwendigkeit von etwaiger Controller-Logik, die UI-Elemente mit Code-Elementen (z.B. über die Annotation \texttt{@IBAction}) verbindet. Dies vereinfacht den Implementationsprozess, bringt jedoch auch verschiedene neue Architektur- und Datenflusskonzepte mit sich, die zunächst verstanden werden müssen, um SwiftUI effektiv und zielorientiert nutzen zu können.
88

99
\section{Datenfluss- und Architekturpatterns in SwiftUI}
1010

thesis.tex

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -156,8 +156,8 @@
156156
\listoffigures
157157
\addcontentsline{toc}{chapter}{\listfigurename}
158158

159-
\listoftables
160-
\addcontentsline{toc}{chapter}{\listtablename}
159+
% \listoftables
160+
% \addcontentsline{toc}{chapter}{\listtablename}
161161

162162
% this is where your thesis lives
163163
\input{sections/introduction.tex}
@@ -169,10 +169,10 @@
169169
% use lowercased roman page numbers for the appendix and the bibliography
170170
\pagenumbering{roman}
171171

172-
\printbibliography[heading=bibintoc]\label{sec:bibliography}%
172+
% \printbibliography[heading=bibintoc]\label{sec:bibliography}%
173173

174-
\begin{appendices}
175-
\input{sections/appendix.tex}
176-
\end{appendices}
174+
% \begin{appendices}
175+
% \input{sections/appendix.tex}
176+
% \end{appendices}
177177

178178
\end{document}

0 commit comments

Comments
 (0)