پیادهسازی Clean Architecture در پروژههای Node.js و Prisma
بررسی اصولی معماری پیازی و تمیز در بکاند؛ تفکیک لایههای Controller، Service، Domain و Repository برای حفظ قابلیت تست و انعطافپذیری دیتابیس.

#چرا در پروژههای بزرگ نیاز به Clean Architecture داریم؟
وقتی یک پروژه بکاند از چند مدل ساده فراتر میرود، قرار دادن کدهای دیتابیس، قوانین تجاری (Business Logic) و پاسخهای HTTP درون یک کنترلر یا روت واحد، به فاجعه نگهداری (Maintenance Nightmare) ختم میشود.
معماری تمیز (Clean Architecture) پیشنهاد شده توسط رابرت مارتین (عمو باب) اصل مهمی را یادآور میشود: قوانین تجاری هسته اصلی نرمافزار هستند و نباید به هیچ فریمورک یا دیتابیسی وابسته باشند.
##ساختار پیشنهادی لایهها:
src/ ├── domain/ # تعاریف موجودیتها و قواعد خالص کسبوکار │ └── user.entity.ts ├── repositories/ # لایه انتزاعی ارتباط با دیتابیس (Prisma) │ └── user.repository.ts ├── services/ # جریانهای کاری و هماهنگی عملیات │ └── auth.service.ts └── controllers/ # کنترلرهای HTTP یا Next.js Route Handlers └── auth.route.ts
##نمونه پیادهسازی Repository Pattern:
typescriptexport interface IUserRepository { findById(id: string): Promise<User | null>; create(data: CreateUserDto): Promise<User>; } export class PrismaUserRepository implements IUserRepository { async findById(id: string) { return prisma.user.findUnique({ where: { id } }); } async create(data: CreateUserDto) { return prisma.user.create({ data }); } }
با این الگو، نوشتن تستهای واحد (Unit Tests) با ماک کردن ریپازیتوری بسیار آسان و سریع خواهد بود.

ادمین اسپاتیکد
verifiedمدیر فنی اسپاتیکد
مدیر ارشد فنی و معمار سیستمهای ابری در آکادمی اسپاتیکد با بیش از ۱۰ سال سابقه در طراحی نرمافزارهای توزیعشده.