تكرار السؤال: …
الإجابة المختصرة
بتقسيم النظام إلى طبقات متحدة المركز: Entities، Use Cases، Controllers/Presenters، وInfrastructure، بحيث تشير التبعيات دائماً للداخل نحو منطق الأعمال المجرد.
الشرح
الهدف هو جعل منطق الأعمال الأساسي (Domain & Use Cases) مستقلاً تماماً عن أي تفاصيل تقنية مثل إطار العمل (Express/Fastify) أو نوع قاعدة البيانات (PostgreSQL/MongoDB). يتم ذلك عبر مبدأ عكس التبعيات (Dependency Inversion)؛ حيث تعرّف طبقة الـ Use Cases واجهات برمجية (Interfaces/Ports)، وتقوم طبقة الـ Infrastructure بتنفيذها وتزويدها عبر الـ Dependency Injection.
مثال بالكود
// Use Case مستقلة عن قاعدة البيانات
export class RegisterUserUseCase {
constructor(private readonly userRepo: UserRepositoryPort) {}
async execute(dto: RegisterUserDto) {
// منطق العمل النقي
}
}أخطاء شائعة
- استيراد نماذج قواعد البيانات (مثل نماذج Mongoose أو TypeORM) مباشرة داخل طبقة الـ Use Cases.