Rumah  >  Artikel  >  hujung hadapan web  >  Satu Tahap Abstraksi: Kunci kepada Fungsi Bersih

Satu Tahap Abstraksi: Kunci kepada Fungsi Bersih

Linda Hamilton
Linda Hamiltonasal
2024-10-30 21:02:30332semak imbas

One Level of Abstraction: The Key to Clean Functions

Pernah melihat fungsi dan rasa hilang dalam kerumitannya? Mari kita terokai prinsip asas kod bersih: fungsi harus mengekalkan hanya satu tahap abstraksi.

Berikut ialah contoh dunia sebenar penciptaan pengguna dalam aplikasi web:

// ❌ A function doing too many things at different abstraction levels
function createUser(userData) {
  // Validate data
  if (!userData.email || !userData.email.includes('@')) {
    return 'Invalid email';
  }
  if (userData.password.length < 8) {
    return 'Password too short';
  }

  // Hash password
  const salt = generateSalt();
  const hashedPassword = hashWithSalt(userData.password, salt);

  // Format user data
  const user = {
    email: userData.email.toLowerCase(),
    password: hashedPassword,
    salt: salt,
    createdAt: new Date()
  };

  // Save to DB
  saveUserToDatabase(user);
}

Fungsi ini mencampurkan tahap abstraksi yang berbeza:

  • Logik perniagaan peringkat tinggi (aliran penciptaan pengguna)
  • Operasi peringkat pertengahan (pengesahan data, pemformatan)
  • Butiran peringkat rendah (pencincangan kata laluan)

Mari kita memfaktorkannya mengikut tahap tunggal prinsip abstraksi:

// ✅ Clean version with one level of abstraction
function createUser(userData) {
  const validationError = validateUserData(userData);
  if (validationError) return validationError;

  const securePassword = hashPassword(userData.password);
  const formattedUser = formatUserData(userData.email, securePassword);

  return saveUserToDatabase(formattedUser);
}

function validateUserData({ email, password }) {
  if (!email || !email.includes('@')) return 'Invalid email';
  if (password.length < 8) return 'Password too short';
  return null;
}

function hashPassword(password) {
  const salt = generateSalt();
  return {
    hash: hashWithSalt(password, salt),
    salt
  };
}

function formatUserData(email, securePassword) {
  return {
    email: email.toLowerCase(),
    password: securePassword.hash,
    salt: securePassword.salt,
    createdAt: new Date()
  };
}

Faedah Pendekatan Ini

  1. Kebolehbacaan: Fungsi utama berbunyi seperti cerita, menerangkan perkara yang berlaku pada tahap tinggi
  2. Kebolehselenggaraan: Setiap fungsi mempunyai tanggungjawab tunggal, menjadikan perubahan lebih selamat
  3. Kebolehujian: Anda boleh menguji setiap bahagian logik secara bebas
  4. Kebolehgunaan semula: Fungsi fokus ini boleh digunakan semula dalam konteks lain

Pengambilan Utama

Apabila menulis fungsi:

  • Pastikan mereka fokus pada satu tahap abstraksi
  • Ekstrak operasi kompleks ke dalam fungsi yang terkenal
  • Jadikan fungsi utama bercerita
  • Fikirkan setiap fungsi sebagai satu langkah dalam proses anda

Ingat: Jika anda mencampurkan "bagaimana" dan "apa" dalam fungsi yang sama, anda mungkin berurusan dengan berbilang tahap abstraksi. Pisahkan mereka!

Atas ialah kandungan terperinci Satu Tahap Abstraksi: Kunci kepada Fungsi Bersih. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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