80 lines
2.2 KiB
TeX
80 lines
2.2 KiB
TeX
\section{Repository}
|
|
|
|
\begin{frame}{Repository minta lényege}
|
|
\begin{block}{Mire jó?}
|
|
\begin{itemize}
|
|
\item Elválasztja az adat-hozzáférést az üzleti logikától
|
|
\item Egységes API az adatok kezelésére
|
|
\item Könnyebben tesztelhető kód
|
|
\end{itemize}
|
|
\end{block}
|
|
\end{frame}
|
|
|
|
\begin{frame}{IRepository és konkret repository}
|
|
\begin{block}{IRepository}
|
|
\begin{itemize}
|
|
\item Absztrakt interfész CRUD műveletekkel
|
|
\item Pl. \texttt{findAll}, \texttt{findById}, \texttt{create}, \texttt{update}, \texttt{delete}
|
|
\end{itemize}
|
|
\end{block}
|
|
|
|
\begin{exampleblock}{Konkret repository}
|
|
Az interfész implementációja (pl. \texttt{UserRepository}).
|
|
\end{exampleblock}
|
|
\end{frame}
|
|
|
|
\begin{frame}[fragile]{IRepository példa (TypeScript)}
|
|
\begin{lstlisting}[language=JavaScript]
|
|
interface IRepository<T> {
|
|
findAll(): Promise<T[]>;
|
|
findById(id: number): Promise<T | null>;
|
|
create(data: T): Promise<T>;
|
|
update(id: number, data: Partial<T>): Promise<T>;
|
|
delete(id: number): Promise<void>;
|
|
}
|
|
\end{lstlisting}
|
|
\end{frame}
|
|
|
|
\begin{frame}[fragile]{Prisma repository példa}
|
|
\begin{block}{Prisma Client}
|
|
A Prisma Client kezeli a kapcsolatot és az SQL generálást.
|
|
\end{block}
|
|
\begin{lstlisting}[language=JavaScript]
|
|
class UserRepository implements IRepository<User> {
|
|
constructor(private prisma: PrismaClient) {}
|
|
findAll() {
|
|
return this.prisma.user.findMany();
|
|
}
|
|
findById(id: number) {
|
|
return this.prisma.user.findUnique({ where: { id } });
|
|
}
|
|
|
|
|
|
\end{lstlisting}
|
|
\end{frame}
|
|
|
|
\begin{frame}[fragile]{Prisma repository példa folytatás}
|
|
\begin{lstlisting}[language=JavaScript]
|
|
create(data: User) {
|
|
return this.prisma.user.create({ data });
|
|
}
|
|
|
|
update(id: number, data: Partial<User>) {
|
|
return this.prisma.user.update({ where: { id }, data });
|
|
}
|
|
|
|
async delete(id: number) {
|
|
await this.prisma.user.delete({ where: { id } });
|
|
}
|
|
}
|
|
\end{lstlisting}
|
|
\end{frame}
|
|
|
|
\begin{frame}{Mikor hasznos?}
|
|
\begin{itemize}
|
|
\item Ha több adatforrás van (SQL, API, cache)
|
|
\item Ha szeretnél változtatható adat-hozzáférést
|
|
\item Ha szükség van mock-olható IRepositories-re tesztekhez
|
|
\end{itemize}
|
|
\end{frame}
|