首页  >  文章  >  web前端  >  一级抽象:简洁函数的关键

一级抽象:简洁函数的关键

Linda Hamilton
Linda Hamilton原创
2024-10-30 21:02:30332浏览

One Level of Abstraction: The Key to Clean Functions

曾经看过一个函数并对其复杂性感到迷失吗?让我们探讨一下干净代码的基本原则:函数应该只维护一个抽象级别。

这是在 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);
}

此函数混合了不同级别的抽象:

  • 高级业务逻辑(用户创建流程)
  • 中级操作(数据验证、格式化)
  • 低级详细信息(密码哈希)

让我们按照单层抽象原则重构它:

// ✅ 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()
  };
}

这种方法的好处

  1. 可读性:主函数读起来就像一个故事,描述了高层发生的事情
  2. 可维护性:每个功能都有单一职责,使更改更安全
  3. 可测试性:可以独立测试每一段逻辑
  4. 可重用性:这些重点功能可以在其他上下文中重用

要点

编写函数时:

  • 让他们专注于一个抽象级别
  • 将复杂的操作提取到命名良好的函数中
  • 让 main 函数讲一个故事
  • 将每个函数视为流程中的一个步骤

记住:如果您在同一个函数中混合“如何”和“什么”,那么您可能正在处理多个抽象级别。把他们分开!

以上是一级抽象:简洁函数的关键的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn