抽象化

詳細を隠蔽し本質だけを外部に公開する行為。

目的は関心の分離にあり、呼び出し側が実装の詳細を知らなくても済む状態を作ること。インターフェースの定義やレイヤー構造の導入が典型例。

共通化とは異なり、実装が一つしか存在しない場合でも有効。テスタビリティの確保や依存関係逆転の原則を適用する場合など。

抽象化の進化

間違った抽象化からの回復

React開発者であるSebastian Markbåge氏の格言:

「間違った抽象化から回復するより、抽象化がない状態から回復する方が簡単」

拙速な抽象化は、後から変更が困難になる可能性があります。

教訓:

抽象化の段階的改善

[[Next.js]]のCache設計の変遷は、抽象化の進化の好例です:

  1. v13-14: 暗黙的なCache(開発者が意識しない抽象化)
  2. v14-15: 段階的な改善(ドキュメント、デフォルト変更)
  3. v16: "use cache"による明示的な抽象化

当初は「開発者が意識しない」ことを目指しましたが、コミュニティのフィードバックを受けて、「開発者が明示的に制御できる」抽象化へと進化しました。

重要な点:

抽象化の粒度

抽象化が粗すぎると柔軟性が失われ、細かすぎると複雑性が増します。適切な粒度を見つけることが重要。

Opt-in設計とOpt-out設計も、抽象化の制御方法の一つです。

関連

参照