generated from leonetienne/LaTeX-Paper-template
feat: digitization
This commit is contained in:
parent
2b04ceeb67
commit
34b56448a7
@ -8,4 +8,5 @@
|
|||||||
\input{appendix/fragebogen-extern}
|
\input{appendix/fragebogen-extern}
|
||||||
\input{appendix/interview-protokoll}
|
\input{appendix/interview-protokoll}
|
||||||
\input{appendix/pflichtenheft}
|
\input{appendix/pflichtenheft}
|
||||||
|
\input{appendix/class-diagram}
|
||||||
\end{appendices}
|
\end{appendices}
|
||||||
|
3
appendix/class-diagram.tex
Normal file
3
appendix/class-diagram.tex
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
\chapter{Klassendiagramm}
|
||||||
|
\label{chap:anhang-class-diagram}
|
||||||
|
\includepdf[pages=-]{images/class-diagram.pdf}
|
@ -41,7 +41,7 @@ Um nähere Anforderungen zu ermitteln, werden die Befragungstechniken \enquote{I
|
|||||||
\cite{bib:heinemann-vorlesung-re}.
|
\cite{bib:heinemann-vorlesung-re}.
|
||||||
|
|
||||||
\section{Interview mit Product Owner}
|
\section{Interview mit Product Owner}
|
||||||
Zunächst wird ein Interview mit dem Product Owner geführt. Ziel dieses Interviews ist
|
Zunächst wird ein Interview mit dem \ac{PO} geführt. Ziel dieses Interviews ist
|
||||||
es, konkrete Fragen zu Anforderungen zu beantworten und somit konkrete Anforderungen zu formulieren.
|
es, konkrete Fragen zu Anforderungen zu beantworten und somit konkrete Anforderungen zu formulieren.
|
||||||
Aufgrund der individuellen Gesprächsführung wurde sich für ein \enquote{Teil-standardisiertes Interview}
|
Aufgrund der individuellen Gesprächsführung wurde sich für ein \enquote{Teil-standardisiertes Interview}
|
||||||
entschieden. Bei einem Teil-standartisiertem Interview gibt es vordefinierte Fragen,
|
entschieden. Bei einem Teil-standartisiertem Interview gibt es vordefinierte Fragen,
|
||||||
@ -63,13 +63,13 @@ Daher ist es wichtig für jede Stakeholdergruppe einen eigenen Fragebogen zu ent
|
|||||||
und die bestimmten Perspektiven beim Entwurf der Fragebögen zu beachten.
|
und die bestimmten Perspektiven beim Entwurf der Fragebögen zu beachten.
|
||||||
Ebenso ist es wichtig, die wichtigsten Fragen am Anfang zu stellen, da Formulare nicht immer vollständig ausgefüllt werden
|
Ebenso ist es wichtig, die wichtigsten Fragen am Anfang zu stellen, da Formulare nicht immer vollständig ausgefüllt werden
|
||||||
\cite{bib:kleine-re-fibel}.
|
\cite{bib:kleine-re-fibel}.
|
||||||
Sämtliche Fragen an die Stakeholdergruppe \enquote{Mitarbeiter \ac{WM}} wurden bereits im Interview mit dem Product Owner
|
Sämtliche Fragen an die Stakeholdergruppe \enquote{Mitarbeiter \ac{WM}} wurden bereits im Interview mit dem \ac{PO}
|
||||||
beantwortet und als Anforderungen festgehalten. Insofern gibt es schlichtweg keine offnen Fragen, die diese Stakeholdergruppe
|
beantwortet und als Anforderungen festgehalten. Insofern gibt es schlichtweg keine offnen Fragen, die diese Stakeholdergruppe
|
||||||
beantworten könnte. Damit fällt ein Onlinefragebogen für \enquote{Mitarbeiter \ac{WM}} weg.
|
beantworten könnte. Damit fällt ein Onlinefragebogen für \enquote{Mitarbeiter \ac{WM}} weg.
|
||||||
Der Fragebogen der Stakeholdergruppe \enquote{teilnehmende Weingüter} liegt in \fullref{chap:anhang-fragebogen-extern} bei.
|
Der Fragebogen der Stakeholdergruppe \enquote{teilnehmende Weingüter} liegt in \fullref{chap:anhang-fragebogen-extern} bei.
|
||||||
|
|
||||||
\section{Ergebnisse}
|
\section{Ergebnisse}
|
||||||
Aus dem Interview mit dem Product Owner und dem Fragebogen an die Winzer ergibt ein Pflichtenheft.
|
Aus dem Interview mit dem \ac{PO} und dem Fragebogen an die Winzer ergibt ein Pflichtenheft.
|
||||||
Dieses ist im Anhang unter \fullref{chap:anhang-pflichtenheft} zu finden.
|
Dieses ist im Anhang unter \fullref{chap:anhang-pflichtenheft} zu finden.
|
||||||
Das Interviewprotokoll und Fragebogenergebnisse sind im Anhang unter
|
Das Interviewprotokoll und Fragebogenergebnisse sind im Anhang unter
|
||||||
\fullref{chap:anhang-interview-protokoll} und XXXX zu finden.
|
\fullref{chap:anhang-interview-protokoll} und XXXX zu finden.
|
||||||
|
@ -42,4 +42,4 @@ in der TYPO3-Backend-Oberfläche implementiert werden.
|
|||||||
\\
|
\\
|
||||||
\\
|
\\
|
||||||
Somit lautet die \textbf{Forschungsfrage}:\\
|
Somit lautet die \textbf{Forschungsfrage}:\\
|
||||||
\textit{Wie kann die Anmeldung und Zustellung von Weinen für Weinproben des Regionalverbunds für Weine in der Weinregion Mosel am effektivsten durch eine TYPO3-Erweiterung realisiert werden, um einen maximalen Nutzen zu erzielen?}
|
\textit{Wie kann die Anmeldung und Zustellung von Weinen für Weinproben des Regionalverbunds für Weine in der Weinregion Mosel effizient und profitabel durch eine TYPO3-Erweiterung realisiert werden?}
|
||||||
|
@ -1,2 +1,82 @@
|
|||||||
\chapter{Konzeption und Entwicklung}
|
\chapter{Umsetzung}
|
||||||
\label{chap:konzeption-entwicklung}
|
\label{chap:umsetzung}
|
||||||
|
Infolge der Anforderungsanalyse befasst sich das Kapitel \enquote{Umsetzung} mit der Implementation der Anforderungen in dem
|
||||||
|
Brown-Field Projekt \cite{bib:schwarzer-vorlesung-swa} in Form einer TYPO3-Extension.
|
||||||
|
|
||||||
|
\section{Setup einer TYPO3-Extension}
|
||||||
|
TYPO3-Extension werden via Composer installiert \cite{bib:typo3-docs-managing-extensions}.
|
||||||
|
Um eine TYPO3-Extension zu erstellen muss also ein Composer-Paket erstellt werden.
|
||||||
|
Um vermeidbare Komplexität zu verhindern wird das Composer-Paket das eine die hier betrachtete
|
||||||
|
TYPO3-Extension darstellt, lokal in den versionierten Ordner \enquote{packages} gelegt.
|
||||||
|
Dieses Verzeichnis wird als Quelle für Composer-Pakete in der
|
||||||
|
Haupt-composer.json-Datei hinterlegt.
|
||||||
|
Somit wird ein Composer-Paket nur für dieses Projekt bereitgestellt,
|
||||||
|
ohne den Aufwand, der mit dem Bereitstellen eines Paketes einhergeht, zu haben.
|
||||||
|
\\
|
||||||
|
\\
|
||||||
|
Um das grundlegende Setup einer Extension effizient durchzuführen wurde eine
|
||||||
|
existierende Extension vergleichbarem Funktionsumfanges kopiert, umbenannt, und eingefügt.
|
||||||
|
Spezifisch ist der \enquote{vergleichbare Funktionsumfang}, dass es Datenmodelle und Plugins
|
||||||
|
gibt.
|
||||||
|
|
||||||
|
\section{Digitization}
|
||||||
|
Die Phase der Digitazion befasst sich mit der digitalen Abbildung von Objekten der realen Welt
|
||||||
|
in einer Art und Weise sodass diese elektronisch weiterverarbeitet werden können \cite{bib:dougherty, bib:loebbecke}.
|
||||||
|
Das bedeutet, dass in diese Phase Datenobjekte definiert und implementiert werden.
|
||||||
|
Ein Datenobjekt besteht nach firmeninternen Konventionen aus zumindest
|
||||||
|
vier Komponenten:
|
||||||
|
\begin{description}
|
||||||
|
\item{Datenbanktabelle} \\
|
||||||
|
Die Datenbanktabelle persistiert Informationen.
|
||||||
|
\item{Domain Model} \\
|
||||||
|
Das Domain Model (auch Model genannt) ist eine PHP-Klasse,
|
||||||
|
die jeweils die Daten einer Zeile der Datenbanktabelle abbildet.
|
||||||
|
\item{Repository} \\
|
||||||
|
Ein Repository ist eine PHP-Klasse, die die Schnittstelle
|
||||||
|
zwischen der Datenbank und der Model-Klasse darstellt.
|
||||||
|
\item{\ac{TCA}} \\
|
||||||
|
Der \ac{TCA} des Modells definiert, wie diese Objekte im TYPO3-Backend dargestellt werden
|
||||||
|
und bearbeitbar sind.
|
||||||
|
\end{description}
|
||||||
|
\cite{bib:typo3-docs-extbase-reference}.
|
||||||
|
|
||||||
|
Im Folgenden wurde ein semiformales Diagramm der Objekte und ihren Relationen nach dem
|
||||||
|
Pflichtenheft angefertigt und in Rücksprache mit dem \ac{PO} finalisiert.
|
||||||
|
|
||||||
|
\begin{nicepic}
|
||||||
|
\includegraphics[width=1\textwidth]{images/objektrelationen-weinlandmosel-einlieferungswerkzeug.png}
|
||||||
|
\captionof{figure}{Objektrelationen}
|
||||||
|
\caption*{Quelle: Eigene Darstellung}
|
||||||
|
\label{fig:objektrelationen}
|
||||||
|
\end{nicepic}
|
||||||
|
|
||||||
|
Nachdem in Erfahrung gebracht wurde, welche konkreten Datenobjekte benötigt werden,
|
||||||
|
wurden Attribute dieser Objekte dem Pflichtenheft entnommen. Diese wurden in einem
|
||||||
|
formalen Klassendiagramm festgehalten und in Rücksprache mit dem \ac{PO}
|
||||||
|
weiter bis zu festen Datentypen und Auswahlmöglichkeiten konkretisiert.
|
||||||
|
Beispielsweise, dass Wettbewerbskategorien als TYPO3-Categories verschachtelt gepflegt
|
||||||
|
werden und dass Geschmacksrichtungen, Qualitätsstufen, Rebsorten, Weinlagen und
|
||||||
|
Weineigenschaften eigene Datenobjekte
|
||||||
|
sein sollen. Geschmack und Qualität sollen daher eigene Objekte sein, damit sich Nutzer
|
||||||
|
für einen festen, nominalen Eintrag via einem Dropdown-Menü entscheiden müssen,
|
||||||
|
diese allerdings immer noch im TYPO3-Backend pflegbar sind. Weinlagen sind allerdings im Brown-Field bereits vorhanden, also sollen hierfür
|
||||||
|
existierenden Einträge verwendet werden. Weineigenschaften sollen pro Wein beliebig viele
|
||||||
|
auswählbar sein, Wettbewerbskategorien, etc, jeweils genau ein Element.
|
||||||
|
Notizen zu diesem Gespräch sind im Anhang unter \fullref{chap:anhang-notizen-digitization}
|
||||||
|
zu finden.
|
||||||
|
\\
|
||||||
|
\\
|
||||||
|
Da das Klassendiagramm gegeben lesbarer Schrift nicht auf eine Textseite passt,
|
||||||
|
befindet es sich vollseitig im Anhang unter \fullref{chap:anhang-class-diagram}.
|
||||||
|
Die weitere Implementation der Datenobjekte ist unkompliziert und besteht hauptsächlich aus
|
||||||
|
repetitivem Schreiben von SQL-Tabellen, Domain-Model-Klassen und \acp{TCA}.
|
||||||
|
Um $m,n$-Beziehungen wie Beispielsweise der Menge der für eine Probe zugelassenen Weinlagen
|
||||||
|
\enquote{allowedVinesites} zwischen \enquote{Jahresauswahlprobe} und \enquote{Vineyardsite} zu
|
||||||
|
ermöglichen, werden MM-Tabellen (many-to-many) benötigt, die diese Beziehungen in Form zweier
|
||||||
|
Foreign Keys speichern. Die Repository-Klassen können \enquote{leer} gelassen werden,
|
||||||
|
da zu diesem Zeitpunkt keine erweiterte Auswahllogik für Datenbankanfragen benötigt wird.
|
||||||
|
Wichtig ist hierbei, dass eine Repository-Klasse existiert. Alle unverzichtbaren
|
||||||
|
Schnittstellen werden über die Basisklasse \enquote{Repository} geerbt
|
||||||
|
\cite{bib:typo3-docs-extdev-tut-tea-repositories}.
|
||||||
|
Mit Abschluss der Digitization können alle Datenstrukturen im TYPO3-Backend händisch angelegt,
|
||||||
|
eingesehen, gelöscht und bearbeitet werden.
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
|
|
||||||
% Document title
|
% Document title
|
||||||
\newcommand{\cfgDocTitle}{Bachelorarbeit}
|
\newcommand{\cfgDocTitle}{Bachelorarbeit}
|
||||||
\newcommand{\cfgDocSubTitle}{Wie kann die Anmeldung und Zustellung von Weinen für Weinproben des Regionalverbunds für Weine in der Weinregion Mosel am effektivsten durch eine TYPO3-Erweiterung realisiert werden, um einen maximalen Nutzen zu erzielen?}
|
\newcommand{\cfgDocSubTitle}{Wie kann die Anmeldung und Zustellung von Weinen für Weinproben des Regionalverbunds für Weine in der Weinregion Mosel effizient und profitabel durch eine TYPO3-Erweiterung realisiert werden?}
|
||||||
|
|
||||||
% Document classification
|
% Document classification
|
||||||
\newcommand{\cfgDocClassification}{Abschlussarbeit}
|
\newcommand{\cfgDocClassification}{Abschlussarbeit}
|
||||||
|
@ -24,6 +24,12 @@
|
|||||||
|
|
||||||
\acro{JAP}[JAP]{Jahresauswahlprobe}
|
\acro{JAP}[JAP]{Jahresauswahlprobe}
|
||||||
\acroplural{JAP}[JAPs]{Jahresauswahlproben}
|
\acroplural{JAP}[JAPs]{Jahresauswahlproben}
|
||||||
|
|
||||||
|
\acro{TCA}[TCA]{Table configuration array}
|
||||||
|
\acroplural{TCA}[TCAs]{Table configuration arrays}
|
||||||
|
|
||||||
|
\acro{PO}[PO]{Product owner}
|
||||||
|
\acroplural{PO}[POs]{Product owner}
|
||||||
%
|
%
|
||||||
%
|
%
|
||||||
\end{acronym}
|
\end{acronym}
|
||||||
|
@ -5,6 +5,29 @@
|
|||||||
\chapter{Glossar}
|
\chapter{Glossar}
|
||||||
|
|
||||||
\begin{description}
|
\begin{description}
|
||||||
|
|
||||||
\item [Frontend] \hfill \\
|
\item [Frontend] \hfill \\
|
||||||
\quotecite{Das Frontend einer Webseite ist der Teil der Webseite, der Endnutzern präsentiert wird. Ein Frontend besteht aus HTML und Cascading Style Sheets} \cite{bib:udjaja}.
|
\quotecite{Das Frontend einer Webseite ist der Teil der Webseite, der Endnutzern präsentiert wird. Ein Frontend besteht aus HTML und Cascading Style Sheets} \cite{bib:udjaja}.
|
||||||
|
|
||||||
|
\item [TYPO3-Backend] \hfill \\
|
||||||
|
\quotecite{The backend's main role is to enable users to create and publish
|
||||||
|
content for their site.
|
||||||
|
The backend is also used to configure a TYPO3 installation. Domains,
|
||||||
|
languages and other information that determine how a site behaves are managed
|
||||||
|
via the backend. Tasks such as adding backend users and managing
|
||||||
|
third-party extensions also take place in the backend.
|
||||||
|
} \cite{bib:typo3-docs-concepts}.
|
||||||
|
|
||||||
|
\item [TYPO3-Extension] \hfill \\
|
||||||
|
\quotecite{Developed by the community, extensions provide a range of solutions that
|
||||||
|
help extend TYPO3} \cite{bib:typo3-docs-concepts}.
|
||||||
|
|
||||||
|
\item [TYPO3-Plugin] \hfill \\
|
||||||
|
\quotecite{Plugins are a specific type of content elements [...]
|
||||||
|
Plugins often use additional database tables which contain records which
|
||||||
|
are dynamically displayed via the plugin - often in a list view, a
|
||||||
|
single view, optionally with pagination and search functionality.
|
||||||
|
An extension may provide several plugins, each with a dedicated function,
|
||||||
|
such as the list view.} \cite{bib:typo3-docs-content-elements-plugins-introduction}
|
||||||
|
|
||||||
\end{description}
|
\end{description}
|
||||||
|
@ -12,6 +12,13 @@
|
|||||||
publisher = {Hochschule Worms},
|
publisher = {Hochschule Worms},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@book{bib:schwarzer-vorlesung-swa,
|
||||||
|
author = {Volker Schwarzer},
|
||||||
|
title = {Vorlesung: Software Architecture},
|
||||||
|
year = {2021},
|
||||||
|
publisher = {Hochschule Worms},
|
||||||
|
}
|
||||||
|
|
||||||
@article{bib:Parviainen_Tihinen_Kaariainen_Teppola_2022,
|
@article{bib:Parviainen_Tihinen_Kaariainen_Teppola_2022,
|
||||||
title={Tackling the digitalization challenge: how to benefit from digitalization in practice},
|
title={Tackling the digitalization challenge: how to benefit from digitalization in practice},
|
||||||
volume={5},
|
volume={5},
|
||||||
@ -296,3 +303,51 @@
|
|||||||
year = {2023},
|
year = {2023},
|
||||||
note = {Zugriff: Januar 2023}
|
note = {Zugriff: Januar 2023}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@misc{bib:typo3-docs-managing-extensions,
|
||||||
|
author = {{TYPO3 Contributors}},
|
||||||
|
howpublished = "\url{https://docs.typo3.org/m/typo3/tutorial-getting-started/main/en-us/Extensions/Management.html}",
|
||||||
|
title = {{Managing Extensions}},
|
||||||
|
year = {2023},
|
||||||
|
note = {Zugriff: Februar 2023}
|
||||||
|
}
|
||||||
|
|
||||||
|
@misc{bib:typo3-docs-concepts,
|
||||||
|
author = {{TYPO3 Contributors}},
|
||||||
|
howpublished = "\url{https://docs.typo3.org/m/typo3/tutorial-getting-started/main/en-us/Concepts}",
|
||||||
|
title = {{TYPO3 Concepts}},
|
||||||
|
year = {2023},
|
||||||
|
note = {Zugriff: Februar 2023}
|
||||||
|
}
|
||||||
|
|
||||||
|
@misc{bib:typo3-docs-file-structure,
|
||||||
|
author = {{TYPO3 Contributors}},
|
||||||
|
howpublished = "\url{https://docs.typo3.org/m/typo3/reference-coreapi/main/en-us/ExtensionArchitecture/FileStructure/Index.html}",
|
||||||
|
title = {{TYPO3 Extension Development File Structure}},
|
||||||
|
year = {2023},
|
||||||
|
note = {Zugriff: Februar 2023}
|
||||||
|
}
|
||||||
|
|
||||||
|
@misc{bib:typo3-docs-content-elements-plugins-introduction,
|
||||||
|
author = {{TYPO3 Contributors}},
|
||||||
|
howpublished = "\url{https://docs.typo3.org/m/typo3/reference-coreapi/main/en-us/ApiOverview/ContentElements/Introduction.html}",
|
||||||
|
title = {{What are Content Elements?}},
|
||||||
|
year = {2023},
|
||||||
|
note = {Zugriff: Februar 2023}
|
||||||
|
}
|
||||||
|
|
||||||
|
@misc{bib:typo3-docs-extbase-reference,
|
||||||
|
author = {{TYPO3 Contributors}},
|
||||||
|
howpublished = "\url{https://docs.typo3.org/m/typo3/reference-coreapi/11.5/en-us/ExtensionArchitecture/Extbase/Reference/Index.html}",
|
||||||
|
title = {{Extbase reference}},
|
||||||
|
year = {2023},
|
||||||
|
note = {Zugriff: Februar 2023}
|
||||||
|
}
|
||||||
|
|
||||||
|
@misc{bib:typo3-docs-extdev-tut-tea-repositories,
|
||||||
|
author = {{TYPO3 Contributors}},
|
||||||
|
howpublished = "\url{https://docs.typo3.org/m/typo3/reference-coreapi/main/en-us/ExtensionArchitecture/Tutorials/Tea/Repository.html}",
|
||||||
|
title = {{Extension development / Tutorials / Tea in a nutshell / Repository}},
|
||||||
|
year = {2023},
|
||||||
|
note = {Zugriff: Februar 2023}
|
||||||
|
}
|
||||||
|
BIN
images/class-diagram.pdf
Normal file
BIN
images/class-diagram.pdf
Normal file
Binary file not shown.
Binary file not shown.
Before Width: | Height: | Size: 374 KiB After Width: | Height: | Size: 312 KiB |
@ -5,6 +5,8 @@
|
|||||||
|
|
||||||
skinparam legendBackgroundColor black
|
skinparam legendBackgroundColor black
|
||||||
|
|
||||||
|
!define GROUP_PACKAGE
|
||||||
|
|
||||||
class Category #OUT_OF_SCOPE_COLOR {
|
class Category #OUT_OF_SCOPE_COLOR {
|
||||||
-uid: Int
|
-uid: Int
|
||||||
-name: String
|
-name: String
|
||||||
@ -17,45 +19,6 @@ class Category #OUT_OF_SCOPE_COLOR {
|
|||||||
+setDescription(description: String): void
|
+setDescription(description: String): void
|
||||||
}
|
}
|
||||||
|
|
||||||
class MasterRecord #OUT_OF_SCOPE_COLOR {
|
|
||||||
-properties: List<Property>
|
|
||||||
-mitgliedsnummer: Int
|
|
||||||
-fe_user: fe_user
|
|
||||||
+getProperties(): List<Property>
|
|
||||||
+setProperties(properties: List<Property>): void
|
|
||||||
+getMitgliedsnummer(): Int
|
|
||||||
+setMitgliedsnummer(nmr: Int): void
|
|
||||||
+getFeUser(): fe_user
|
|
||||||
+setFeUser(feUser: fe_user): void
|
|
||||||
}
|
|
||||||
|
|
||||||
class Address #OUT_OF_SCOPE_COLOR {
|
|
||||||
-street: String
|
|
||||||
-zip: String
|
|
||||||
-name: String
|
|
||||||
-city: String
|
|
||||||
+getStreet(): String
|
|
||||||
+setStreet(street: String): void
|
|
||||||
+getZip(): String
|
|
||||||
+setZip(zip: String): void
|
|
||||||
+getName(): String
|
|
||||||
+setName(name: String): void
|
|
||||||
+getCity(): String
|
|
||||||
+setCity(city: String): void
|
|
||||||
}
|
|
||||||
|
|
||||||
class Property #OUT_OF_SCOPE_COLOR {
|
|
||||||
-addresses: List<Address>
|
|
||||||
+getAddresses(): List<Address>
|
|
||||||
+setAddresses(addresses: List<Address>): void
|
|
||||||
}
|
|
||||||
|
|
||||||
class Winery #OUT_OF_SCOPE_COLOR {
|
|
||||||
-name: String
|
|
||||||
+getName(): String
|
|
||||||
+setName(name: String): void
|
|
||||||
}
|
|
||||||
|
|
||||||
class Grape #IMPLEMENTED_COLOR {
|
class Grape #IMPLEMENTED_COLOR {
|
||||||
-uid: Int
|
-uid: Int
|
||||||
-name: String
|
-name: String
|
||||||
@ -68,7 +31,31 @@ class Grape #IMPLEMENTED_COLOR {
|
|||||||
+setDescription(description: String): void
|
+setDescription(description: String): void
|
||||||
}
|
}
|
||||||
|
|
||||||
class Vinesite #IMPLEMENTED_COLOR {
|
class Taste #IMPLEMENTED_COLOR {
|
||||||
|
-uid: Int
|
||||||
|
-name: String
|
||||||
|
-description: String
|
||||||
|
+getUid(): Int
|
||||||
|
+setUid(uid: Int): void
|
||||||
|
+getName(): String
|
||||||
|
+setName(name: String): void
|
||||||
|
+getDescription(): String
|
||||||
|
+setDescription(description: String): void
|
||||||
|
}
|
||||||
|
|
||||||
|
class Quality #IMPLEMENTED_COLOR {
|
||||||
|
-uid: Int
|
||||||
|
-name: String
|
||||||
|
-description: String
|
||||||
|
+getUid(): Int
|
||||||
|
+setUid(uid: Int): void
|
||||||
|
+getName(): String
|
||||||
|
+setName(name: String): void
|
||||||
|
+getDescription(): String
|
||||||
|
+setDescription(description: String): void
|
||||||
|
}
|
||||||
|
|
||||||
|
class Vinesite #OUT_OF_SCOPE_COLOR {
|
||||||
-uid: Int
|
-uid: Int
|
||||||
-name: String
|
-name: String
|
||||||
-description: String
|
-description: String
|
||||||
@ -110,8 +97,8 @@ class Wine #IMPLEMENTED_COLOR {
|
|||||||
-vinesite: Vinesite
|
-vinesite: Vinesite
|
||||||
-category: Category
|
-category: Category
|
||||||
-vintage: int
|
-vintage: int
|
||||||
-quality: int
|
-quality: Quality
|
||||||
-taste: String
|
-taste: Taste
|
||||||
-winekinds: List<WineKind>
|
-winekinds: List<WineKind>
|
||||||
-ap_nr: String
|
-ap_nr: String
|
||||||
-acidity: float
|
-acidity: float
|
||||||
@ -136,10 +123,10 @@ class Wine #IMPLEMENTED_COLOR {
|
|||||||
+setCategory(category: Category): void
|
+setCategory(category: Category): void
|
||||||
+getVintage(): int
|
+getVintage(): int
|
||||||
+setVintage(vintage: int): void
|
+setVintage(vintage: int): void
|
||||||
+getQuality(): int
|
+getQuality(): Quality
|
||||||
+setQuality(quality: int): void
|
+setQuality(quality: Quality): void
|
||||||
+getTaste(): String
|
+getTaste(): Taste
|
||||||
+setTaste(taste: String): void
|
+setTaste(taste: Taste): void
|
||||||
+getWinekinds(): List<Winekind>
|
+getWinekinds(): List<Winekind>
|
||||||
+setWinekinds(winekinds: List<WineKind>): void
|
+setWinekinds(winekinds: List<WineKind>): void
|
||||||
+getApNr(): String
|
+getApNr(): String
|
||||||
@ -191,14 +178,12 @@ class Jahresauswahlprobe #IMPLEMENTED_COLOR {
|
|||||||
+setUid(uid: Int): void
|
+setUid(uid: Int): void
|
||||||
}
|
}
|
||||||
|
|
||||||
MasterRecord "1" --> "1" Participant
|
|
||||||
MasterRecord "1" --> "*" Property
|
|
||||||
Property "1" --> "*" Address
|
|
||||||
Property <|-- Winery
|
|
||||||
Category "1" <-- "*" Wine
|
Category "1" <-- "*" Wine
|
||||||
Grape "1" <-- "*" Wine
|
Grape "1" <-- "*" Wine
|
||||||
Vinesite "1" <-- "*" Wine
|
Vinesite "1" <-- "*" Wine
|
||||||
Participant "1" <-- "*" Wine
|
Participant "1" <-- "*" Wine
|
||||||
|
Taste "1" <-- "*" Wine
|
||||||
|
Quality "1" <-- "*" Wine
|
||||||
WineKind "1" <-- "*" Wine
|
WineKind "1" <-- "*" Wine
|
||||||
Jahresauswahlprobe "*" <-- "*" Wine
|
Jahresauswahlprobe "*" <-- "*" Wine
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user