reviwed and completed several patterns (excepting DependencyInjection, because we don't know anything about it)

This commit is contained in:
Moser Benjamin 2019-03-02 18:01:16 +01:00
parent 3fadff8492
commit 507430df6c
2 changed files with 136 additions and 30 deletions

BIN
pse.pdf

Binary file not shown.

166
pse.tex
View File

@ -266,6 +266,20 @@ MVC unterteilt eine interaktive Applikation in drei Teile: Model, View und Contr
\item die Verarbeitung von Requests und Responses wird ermöglicht,
\item JSF und JSP können darauf aufsetzen, in unserem Projekt wurde JSF verwendet
\end{itemize}
\begin{minted}[linenos,breaklines=true]{xml}
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1">
...
<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>*.xhtml</url-pattern>
</servlet-mapping>
\end{minted}
\subsubsection{Java Server Faces (JSF)}
\begin{itemize}
\item JSF basiert auf dem MVC-Pattern
@ -280,20 +294,8 @@ MVC unterteilt eine interaktive Applikation in drei Teile: Model, View und Contr
\includegraphics[width=0.5\textwidth]{pics/fc_pat.jpg}
\end{figure}
\begin{minted}[linenos,breaklines=true]{xml}
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1">
...
<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>*.xhtml</url-pattern>
</servlet-mapping>
\end{minted}
\begin{minted}[linenos,breaklines=true]{xml}
<!-- Pfad: /src/main/webapp/community/documentManagement.xhtml -->
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE composition PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
@ -350,15 +352,15 @@ mode="advanced" label="Add document (.pdf .jpg .docx)">
\item da bei jedem Request ein neues Command Objekt erzeugt wird ist Thread-Safety nicht notwendig
\item da nur EIN Controller sind auch Erweiterungen durch z.B.: Decorator einfach (auch zur Laufzeit)
\end{itemize}
\section{View Helper}
\section{View Helper (\textit{/src/main/java/at/fhj/swd/psoe/web/*})}
\subsection{Erkläre die Funktion + Skizze}
\begin{figure}[h!]
\centering
\includegraphics[width=0.8\textwidth]{pics/view-helper_pat1.jpg}
\end{figure}
\begin{itemize}
\item View (xhtml-Dateien im Ordner webapp) delegiert Aufgaben an Helper (*Controller-Klassen - z.B. DocumentController im Ordner web)
\item Helper adaptieren View zu Model (Klassen in den Ordnern service und data)
\item View (xhtml-Dateien im Ordner \textit{/src/main/webapp/*}) delegiert Aufgaben an Helper (z.B. DocumentController im Ordner web)
\item Helper adaptieren View zu Model (Klassen in den Ordnern \textit{src/main/java/at/fhj/swd/psoe/service/*} und \textit{src/main/java/at/fhj/swd/psoe/data/*})
\item in View befindet sich HTML Code im ViewHelper Java Code zur Aufbereitung der Daten (+ wenig HTML)
\end{itemize}
\subsection{Nenne die Konsequenzen der Anwendung}
@ -374,12 +376,12 @@ mode="advanced" label="Add document (.pdf .jpg .docx)">
\end{itemize}
\section{Dependency Injection (don't call us, we'll call you)}
\section{Dependency Injection (CDI-Framework in pom.xml im Projekt)}
\subsection{Erkläre die Funktion + Skizze}
%TODO Zarwos is die Dependency-Injection in unserem Projekt guat und wo is se, verdammte Scheiße noch amol, wo konfigurierst denn den Dreck donn überhaupt???
\begin{figure}[!htp]
\centering
\includegraphics[width=0.5\textwidth]{pics/dependency_inj_pat.jpg}
\includegraphics[width=0.4\textwidth]{pics/dependency_inj_spring_pat.jpg}
\includegraphics[width=0.8\textwidth]{pics/dependency_inj_pat.jpg}
\end{figure}
\begin{itemize}
\item Grundidee sind loose gekoppelte Objekte
@ -408,15 +410,18 @@ mode="advanced" label="Add document (.pdf .jpg .docx)">
\end{minted}
\end{itemize}
\begin{itemize}
\item Im Spring Context: Dependency Injection mit XML-Datei
\item alle Beans sind dort gelistet und werden verknüpft
\item Context wird geladen damit alles verknüpft ist
\item erspart Factories
\item Im Spring Context:
\begin{itemize}
\item Dependency Injection mit XML-Datei
\item alle Beans sind dort gelistet und werden verknüpft
\item Context wird geladen damit alles verknüpft ist
\item erspart Factories
\end{itemize}
\end{itemize}
\subsection{Nenne die Konsequenzen der Anwendung}
\begin{itemize}
\item loose gekoppelte Objekte
\item Referenzen nurmehr auf Interfaces
\item Referenzen nur noch auf Interfaces
\item hohe Flexibilität (Strategy, Proxy,..)
\item bessere Erweiterbarkeit und Testbarkeit
\item bei Spring kann Dependency Injection mittels XML oder Annotation erfolgen
@ -437,14 +442,115 @@ mode="advanced" label="Add document (.pdf .jpg .docx)">
\item fasst Daten verschiedener Objekte zusammen die vom Remote Objekt benötigt werden
\item ev. Map, Record Set, ...
\end{itemize}
\subsection{Beschreibe ein konkretes Anwendungsbeispiel}
% todo: Anwendungsbeispiel
\subsection{Verwendung im Projekt in \textit{src/main/java/at/fhj/swd/psoe/service/dto/*}}
\begin{minted}[linenos,breaklines=true]{java}
package at.fhj.swd.psoe.service.dto;
import java.io.Serializable;
import java.util.Date;
public class DocumentDTO implements Serializable {
private static final long serialVersionUID = 4016557982897997689L;
private Long id;
private Long documentlibraryID;
private String filename;
private UserDTO user;
private byte[] data;
private Date createdTimestamp;
public DocumentDTO() {}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public Long getDocumentlibraryID() {
return documentlibraryID;
}
public void setDocumentlibraryID(Long documentlibraryID) {
this.documentlibraryID = documentlibraryID;
}
public String getFilename() {
return filename;
}
public void setFilename(String filename) {
this.filename = filename;
}
public UserDTO getUser() {
return user;
}
public void setUser(UserDTO user) {
this.user = user;
}
public byte[] getData() {
return data;
}
public void setData(byte[] data) {
this.data = data;
}
public Date getCreatedTimestamp() {
return createdTimestamp;
}
public void setCreatedTimestamp(Date createdTimestamp) {
this.createdTimestamp = createdTimestamp;
}
@Override
public String toString() {
return "DocumentDTO{" +
"id=" + id +
", documentlibraryID=" + documentlibraryID +
", filename='" + filename + '\'' +
'}';
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof DocumentDTO)) return false;
DocumentDTO that = (DocumentDTO) o;
return id.equals(that.id);
}
@Override
public int hashCode() {
return id.hashCode();
}
}
\end{minted}
\subsection{Nenne die Konsequenzen der Anwendung}
\begin{itemize}
\item kapselt und versteckt
\item nimmt Komplexität
\item steigert Effizienz da weniger Aufrufe über Remotegrenze
\item kapselt und versteckt
\item nimmt Komplexität
\item steigert Effizienz da weniger Aufrufe über Remotegrenze
\end{itemize}
\section{Page-Object-Pattern}
PageObjectPattern