12345678910111213141516171819202122232425262728293031323334 |
- \section{Shop}
- \label{shop}
- \label{sec:shop}
- \begin{figure}[ht]
- \centering
- \includegraphics[width=0.45\textwidth]{images/Shop_Overview.eps}
- \label{shop_overview}
- \caption{Shop - Class Overview}
- \end{figure}
- %TODO reference figure.
- %\subsection{\code{Shop} - Starting your SalesPoint-application}
- \code{Shop} is a central class in \salespoint{}; it holds references to all manager interfaces and a reference to the \code{Time} interface.
- There are six manager interfaces and interfaces aggregating (persistent) objects in \salespoint{}: \code{Accountancy}, \code{Calendar}, \code{Catalog}, \code{Inventory}, \code{OrderManager} and \code{UserManager}.
- Other classes use the \code{Shop} to access the manager interfaces, for example \code{Order.completeOrder()} uses \code{Shop.INSTANCE.getInventory()} for product removal.
- \code{PersistentCalendar} uses \code{Shop.INSTANCE.getTime()} for time based operations.
- There is also a convenience method to minimize boilerplate code\footnote{
- It was mentioned to us, that boilerplate code may also be called infrastructure code.
- We disagree, because we consider configuration files, (startup-) scripts, deployment scripts, etc infrastructure code.
- Wikipedia defines boilerplate code as follows:
- \begin{quote}
- In computer programming, boilerplate is the term used to describe sections of code that have to be included in many places with little or no alteration.
- It is more often used when referring to languages which are considered verbose, i.e. the programmer must write a lot of code to do minimal jobs.
- \end{quote}}
- \code{Shop.initializeShop()};
- it is used for setting all managers of \code{Shop} to Salespoints persistent class implementations and the time to \code{DefaultTime}.
- This behaviour is also known as \textit{convention over configuration}, which means reasonable default values are supplied, eliminating the need to explicitly specify those values in most cases.
- \code{Shop} is implemented as a singleton.
- Although \code{Shop} holds references to all managers and aggregating classes (see Section \ref{chap:components}), persistent implementations do not need to be singletons and are infact not.
- Moreover, a peculiarity of all managers and aggregating classes is, that a new instance can be created whenever one is needed.
- The reason for this behaviour is, that data is not stored inside the manager object itself, as it may be done with a collection-based implementation, but the manager class is merely a transparent interface to the JPA and database.\\
|