diff --git a/parts/01_patterns.tex b/parts/01_patterns.tex index 9ac5eea..eaca28d 100644 --- a/parts/01_patterns.tex +++ b/parts/01_patterns.tex @@ -377,10 +377,16 @@ mode="advanced" label="Add document (.pdf .jpg .docx)"> \includegraphics[width=0.8\textwidth]{pics/dependency_inj_pat.jpg} \end{figure} \begin{itemize} - \item Grundidee sind loose gekoppelte Objekte - \item Objekte werden mittels externem Assembler verknüpft - \item Abhängigkeiten bestehen nur auf Interfaces - \item Assembler Objekt (Framework) erzeugt die Interface-Implementierungen (z.B.: durch Factory) + \item ein Hauptgrund für Dependency Injection ist die Trennung zwischen Business- und Instanzierungslogik + \item Klassen sollen nur noch Abhängigkeiten auf Interfaces haben + \item die Verwendung des new Operators stattdessen würde eine Abhängigkeit zur Implementierungsklasse herstellen + \item Implementierungsklassen sollen auf Interfaces referenzieren, wobei es ihnen egal wie diese Referenz hergestellt wird + \item Die Instanziierung wird in die sogenannte Assembler Klasse "`herausgezogen"' + \item Objekte werden mittels des Assembler "`gebaut"'. + \item Zudem instanziiert er die Objekte und injected die Referenzen + \item So hat er Client nur mehr eine Abhängigkeit auf das Interface + \item wird die Implementierung getauscht, so geschieht das direkt im Assembler ohne den Client zu beeinflussen + \item der Container erledigt DI über @Inject indem er prüft welche Klasse das Interface implementiert und entsprechende Referenz bei der Annotation einhängt \item Es wird zwischen Constructor Injection und Setter Injection unterschiedlichen \begin{minted}[linenos,breaklines=true]{java} // Constructor Injection @@ -399,26 +405,12 @@ mode="advanced" label="Add document (.pdf .jpg .docx)"> }} \end{minted} \end{itemize} -\begin{itemize} - \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 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 - \begin{itemize} - \item Vorteil Annotation: Typ-Sicherheit (Tippfehler passieren schnell im XML) - \item Nachteil Annotation: nicht so flexibel wie XML - \end{itemize} \end{itemize} \section{Data Transfer Object (DTO) Pattern} \subsection{Erkläre die Funktion (Skizze - ein Grund für DTO)} diff --git a/pse.pdf b/pse.pdf index 3d574f2..b2d4506 100644 Binary files a/pse.pdf and b/pse.pdf differ