Menerapkan SOLID Prinsip di Node.js

Single Responsibility Principle(SRP)

Prinsip ini menyatakan bahwa sebuah kelas hanya memiliki satu alasan untuk berubah, artinya setiap kelas harus melakukan fungsi tertentu.

Contoh: Mengelola data pengguna dan mengirimkan email notifikasi.

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

Open/Closed Principle(OCP)

Prinsip ini mendorong perluasan fungsionalitas dengan menambahkan kode baru daripada memodifikasi kode yang sudah ada.

Contoh: Menangani berbagai metode pembayaran dalam aplikasi e-niaga.

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)

Prinsip ini menegaskan bahwa objek dari kelas turunan harus dapat diganti dengan objek dari kelas dasar tanpa mempengaruhi kebenaran program.

Contoh: Mengelola bentuk geometris.

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

Prinsip Segregasi Antarmuka(ISP)

Prinsip ini menyarankan memecah antarmuka menjadi yang lebih kecil untuk menghindari memaksa kelas untuk mengimplementasikan metode yang tidak mereka perlukan.

Contoh: Antarmuka untuk memperbarui dan menampilkan data.

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

Dependency Inversion Principle(DIP)

Prinsip ini menunjukkan bahwa modul tingkat tinggi tidak boleh bergantung pada modul tingkat rendah; keduanya harus bergantung pada abstraksi.

Contoh: Menggunakan dependency injection untuk mengelola dependensi.

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

Ingat, contoh-contoh ini hanyalah ilustrasi tentang bagaimana menerapkan SOLID prinsip-prinsip dalam Node.js. Dalam praktiknya, Anda harus menerapkannya secara fleksibel berdasarkan tujuan dan skala proyek Anda.