65 lines
1.7 KiB
TeX
65 lines
1.7 KiB
TeX
\section{Mapper}
|
|
|
|
\begin{frame}{Mapper minta szerepe}
|
|
\begin{block}{Mi a mapper?}
|
|
\begin{itemize}
|
|
\item Átalakítás domain objektumok és DTO-k között
|
|
\item Elválasztja az adatformátumot az üzleti modelltől
|
|
\item Központi helyen tartja az átalakítás logikáját
|
|
\end{itemize}
|
|
\end{block}
|
|
\end{frame}
|
|
|
|
\begin{frame}{Miért hasznos?}
|
|
\begin{itemize}
|
|
\item Csökkenti a duplikált átalakításokat
|
|
\item Stabil API-szerződések (DTO-k) a változó domain mellett
|
|
\item Tesztelhető, moduláris és újrafelhasználható kód
|
|
\end{itemize}
|
|
\end{frame}
|
|
|
|
\begin{frame}[fragile]{Egyszerű mapper példa}
|
|
\begin{lstlisting}[language=JavaScript]
|
|
// Domain objektum
|
|
const user = {
|
|
id: 1, name: "John Doe",
|
|
email: "john@example.com", passwordHash: "..."
|
|
};
|
|
|
|
// Mapper függvény
|
|
const toUserDto = (u) => ({
|
|
id: u.id, name: u.name, email: u.email
|
|
});
|
|
\end{lstlisting}
|
|
\end{frame}
|
|
|
|
\begin{frame}[fragile]{Kétirányú mapper}
|
|
\begin{lstlisting}[language=JavaScript]
|
|
const toUserEntity = (dto) => ({
|
|
id: dto.id ?? undefined,
|
|
name: dto.name,
|
|
email: dto.email
|
|
});
|
|
\end{lstlisting}
|
|
|
|
\begin{block}{Megjegyzés}
|
|
Írhatsz külön mappert bejövő és kimenő adatokra.
|
|
\end{block}
|
|
\end{frame}
|
|
|
|
\begin{frame}{Mapper és repository}
|
|
\begin{itemize}
|
|
\item Repository a tárolást kezeli
|
|
\item Mapper az objektumok formátumát kezeli
|
|
\item Két külön felelősségi kör
|
|
\end{itemize}
|
|
\end{frame}
|
|
|
|
\begin{frame}{Jó gyakorlatok}
|
|
\begin{itemize}
|
|
\item Ne másolj át érzékeny mezőket (pl. jelszó)
|
|
\item Tartsd egy helyen az átalakításokat
|
|
\item Használj tiszta függvényeket és kis helper-eket
|
|
\end{itemize}
|
|
\end{frame}
|