Rumah > hujung hadapan web > tutorial js > Memahami Kod Bersih: Kelas ⚡️

Memahami Kod Bersih: Kelas ⚡️

王林
Lepaskan: 2024-09-10 11:09:02
asal
943 orang telah melayarinya

Understanding Clean Code: Classes ⚡️

Kelas adalah penting dalam pengaturcaraan berorientasikan objek tetapi yang direka dengan buruk boleh membawa kepada kod yang bermasalah.

Kod Bersih Bab 10 menyerlahkan kepentingan kelas yang bersatu dengan satu tanggungjawab.

Dalam artikel ini, kami akan berkongsi cerapan utama dan menunjukkan aplikasinya dalam JavaScript.


? Apakah Kesepaduan Kelas?

Kesepaduan merujuk kepada betapa rapatnya perkaitan tanggungjawab sesebuah kelas.

Kelas yang bersatu padu memfokuskan pada satu tujuan dan mempunyai tanggungjawab yang sesuai secara semula jadi.

Ini memastikan kelas mudah, boleh dibaca dan mudah diselenggara.

Contoh: Kesepaduan Rendah

class User {
  constructor(name, email) {
    this.name = name;
    this.email = email;
  }

  // Handles user registration
  register() {
    // Registration logic
  }

  // Sends email to user
  sendEmail(message) {
    // Email sending logic
  }

  // Logs activity of the user
  logActivity(activity) {
    console.log(`${this.name} performed: ${activity}`);
  }
}
Salin selepas log masuk

Dalam contoh di atas, kelas Pengguna mempunyai tiga tanggungjawab yang tidak berkaitan: pendaftaran pengguna, menghantar e-mel dan aktiviti pengelogan.

Kelas ini tidak mempunyai perpaduan kerana ia cuba melakukan terlalu banyak perkara secara serentak.


? Prinsip Tanggungjawab Tunggal (SRP)

Prinsip Tanggungjawab Tunggal menyatakan bahawa kelas harus mempunyai satu, dan hanya satu, sebab untuk berubah. Ini bermakna setiap kelas harus memberi tumpuan kepada satu kebimbangan.

Jika kelas mempunyai lebih daripada satu tanggungjawab, perubahan dalam satu kawasan boleh memecahkan kefungsian yang lain.

⚡️ Pemfaktoran semula untuk SRP

Mari kita faktorkan semula contoh di atas untuk mematuhi SRP:

class User {
  constructor(name, email) {
    this.name = name;
    this.email = email;
  }
}

class UserRegistrationService {
  register(user) {
    // Registration logic
  }
}

class EmailService {
  sendEmail(user, message) {
    // Email sending logic
  }
}

class ActivityLogger {
  logActivity(user, activity) {
    console.log(`${user.name} performed: ${activity}`);
  }
}
Salin selepas log masuk

Kini, setiap kelas mempunyai satu tanggungjawab:

  • Pengguna: mewakili objek pengguna dan menyimpan data.
  • UserRegistrationService: mengendalikan pendaftaran pengguna.
  • EmailService: mengendalikan penghantaran e-mel.
  • ActivityLogger: mengendalikan aktiviti pengguna log.

Dengan struktur ini, perubahan pada sistem e-mel tidak akan menjejaskan logik pendaftaran pengguna dan begitu juga sebaliknya.


? Faedah SRP dan Kesepaduan

  • Kebolehselenggaraan: Apabila kelas mempunyai satu tanggungjawab, lebih mudah untuk mencari dan membetulkan pepijat. Anda tidak perlu mengharungi logik yang tidak berkaitan.

  • Skalabiliti: Apabila projek anda berkembang, mematuhi SRP menjadikannya lebih mudah untuk menambah ciri baharu. Fungsi baharu boleh ditambah dalam kelas baharu tanpa menyentuh yang sedia ada.

  • Kestabilan: Kelas dengan satu tanggungjawab lebih mudah untuk diuji. Setiap kelas mempunyai skop terhad, jadi ujian unit boleh memfokuskan pada bahagian fungsi individu.


? Mengenalpasti Pertindihan Tanggungjawab

Untuk memastikan kelas anda bersatu, cari kawasan di mana pelbagai tanggungjawab digabungkan.

Selalunya, kelas bermula dengan mudah, tetapi apabila ciri ditambah, ia boleh mengumpul tugas tambahan.

Contoh: Memfaktorkan Semula Sistem Pembayaran

Katakanlah kami mempunyai kelas PaymentProcessor yang mengendalikan berbilang tugas:

class PaymentProcessor {
  constructor() {
    this.paymentGateway = new PaymentGateway();
  }

  processPayment(paymentDetails) {
    // Payment processing logic
  }

  validatePaymentDetails(paymentDetails) {
    // Validation logic
  }

  logTransaction(paymentDetails) {
    console.log(`Payment processed: ${JSON.stringify(paymentDetails)}`);
  }
}
Salin selepas log masuk

Di sini, PaymentProcessor bertanggungjawab untuk memproses pembayaran, mengesahkan butiran dan mengelog transaksi.

Ini adalah peluang untuk memfaktorkan semula dan membahagikan tanggungjawab:

class PaymentProcessor {
  constructor(paymentGateway, validator, logger) {
    this.paymentGateway = paymentGateway;
    this.validator = validator;
    this.logger = logger;
  }

  processPayment(paymentDetails) {
    if (this.validator.isValid(paymentDetails)) {
      this.paymentGateway.process(paymentDetails);
      this.logger.logTransaction(paymentDetails);
    }
  }
}

class PaymentValidator {
  isValid(paymentDetails) {
    // Validation logic
    return true; // Simplified for example
  }
}

class PaymentLogger {
  logTransaction(paymentDetails) {
    console.log(`Payment processed: ${JSON.stringify(paymentDetails)}`);
  }
}
Salin selepas log masuk

Kini, kelas PaymentProcessor mempunyai satu tanggungjawab: memproses pembayaran.

Pengesahan dan pengelogan telah dialihkan ke kelas berasingan (PaymentValidator dan PaymentLogger).


⚡️ Kesimpulan

Mereka bentuk kelas dengan perpaduan dan mematuhi Prinsip Tanggungjawab Tunggal memastikan asas kod anda kekal fleksibel, boleh diselenggara dan mudah difahami.

Dengan membahagikan tanggungjawab kepada kelas yang berasingan dan berfokus, anda mengurangkan kerumitan komponen individu dan menjadikan sistem anda lebih teguh.

Dalam JavaScript, di mana kelas sering digunakan dalam rangka kerja atau aplikasi yang lebih besar, mengikut prinsip ini akan meningkatkan kualiti kod anda dengan ketara.

Seperti yang dijelaskan oleh buku Kod Bersih, menulis kelas bersih bukan sekadar mengatur kod—ia mengenai mencipta sistem yang boleh berkembang tanpa menjadi mimpi ngeri untuk dikekalkan.


Selamat Pengekodan!

Atas ialah kandungan terperinci Memahami Kod Bersih: Kelas ⚡️. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:dev.to
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan