تطبيق SOLID المبادئ في Node.js

Single Responsibility Principle(SRP)

ينص هذا المبدأ على أنه يجب أن يكون للفصل سبب واحد فقط للتغيير ، مما يعني أن كل فئة يجب أن تؤدي وظيفة معينة.

مثال: إدارة بيانات المستخدم وإرسال email الإشعارات.

class UserManager {  
  constructor() {}  
    
  createUser(userData) {  
    // Logic for creating a user  
  }  
}  
  
class EmailService {  
  constructor() {}  
    
  sendEmail(emailData) {  
    // Logic for sending an email  
  }  
}  

Open/Closed Principle(OCP)

يشجع هذا المبدأ على توسيع الوظائف عن طريق إضافة رمز جديد بدلاً من تعديل الكود الحالي.

مثال: التعامل مع طرق الدفع المختلفة في تطبيق التجارة الإلكترونية.

class PaymentProcessor {  
  processPayment() {  
    // Common logic for payment processing  
  }  
}  
  
class CreditCardPaymentProcessor extends PaymentProcessor {  
  processPayment() {  
    // Logic for processing credit card payment  
  }  
}  
  
class PayPalPaymentProcessor extends PaymentProcessor {  
  processPayment() {  
    // Logic for processing PayPal payment  
  }  
}  

Liskov Substitution Principle(LSP)

يؤكد هذا المبدأ أن كائنات الفئة المشتقة يجب أن تكون قابلة للاستبدال بكائنات من الفئة الأساسية دون التأثير على صحة البرنامج.

مثال: إدارة الأشكال الهندسية.

class Shape {  
  area() {}  
}  
  
class Rectangle extends Shape {  
  constructor(width, height) {}  
    
  area() {  
    return this.width * this.height;  
  }  
}  
  
class Square extends Shape {  
  constructor(side) {}  
    
  area() {  
    return this.side * this.side;  
  }  
}  

مبدأ الفصل بين الواجهة(ISP)

ينصح هذا المبدأ بتقسيم الواجهات إلى واجهات أصغر لتجنب إجبار الفئات على تنفيذ الأساليب التي لا تحتاج إليها.

مثال: واجهات لتحديث البيانات وعرضها.

class UpdateableFeature {  
  updateFeature() {}  
}  
  
class DisplayableFeature {  
  displayFeature() {}  
}  

Dependency Inversion Principle(DIP)

يشير هذا المبدأ إلى أن الوحدات عالية المستوى لا ينبغي أن تعتمد على وحدات المستوى المنخفض ؛ كلاهما يجب أن يعتمد على التجريد.

مثال: استخدام dependency injection لإدارة التبعيات.

class OrderProcessor {  
  constructor(dbConnection, emailService) {  
    this.dbConnection = dbConnection;  
    this.emailService = emailService;  
  }  
}  

تذكر أن هذه الأمثلة هي مجرد أمثلة توضيحية لكيفية تطبيق SOLID المبادئ في Node.js. من الناحية العملية ، ستحتاج إلى تطبيقها بمرونة بناءً على الغرض من مشروعك وحجمه.