1 レベルの抽象化: クリーンな関数の鍵

Linda Hamilton
リリース: 2024-10-30 21:02:30
オリジナル
331 人が閲覧しました

One Level of Abstraction: The Key to Clean Functions

関数を見て、その複雑さに迷ったことはありませんか?クリーンなコードの基本原則を見てみましょう。関数は 1 つのレベルの抽象化のみを維持する必要があります。

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. 可読性: main 関数は、高レベルで何が起こるかを説明する物語のように読めます
  2. 保守性: 各機能は単一の責任を持ち、変更をより安全にします
  3. テスト可能性: ロジックの各部分を個別にテストできます
  4. 再利用性: これらの焦点を絞った機能は、他のコンテキストで再利用できます

重要なポイント

関数を記述する場合:

  • 1 つの抽象レベルに集中させてください
  • 複雑な操作を適切な名前の関数に抽出します
  • メイン関数にストーリーを持たせる
  • 各関数をプロセスの 1 つのステップとして考えてください

覚えておいてください: 同じ関数内で「どのように」と「何を」を混在させる場合は、おそらく複数のレベルの抽象化を扱っていることになります。分割してください!

以上が1 レベルの抽象化: クリーンな関数の鍵の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:dev.to
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!