\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}