iT邦幫忙

2025 iThome 鐵人賽

DAY 25
0

把外部框架(如 HuggingFace、OpenAI API)放在最外圈。

今日主題:

在程式世界裡,「框架(Framework)」就像工具箱,
裡面有螺絲起子、扳手、電鑽,可以幫我們更快完成作品。
但這些工具不是永遠都一樣,有時會壞、有時會更新。
所以,我們不要讓整個房子都黏在工具上,
而是讓工具待在「最外圈」,隨時可以換。

範例故事:

小明要蓋一間 LEGO 房子。
他用了一組電動工具幫忙組裝,很方便。
但有一天,那個品牌停產了。
幸好他把「工具」跟「房子」分開,
換成別家的螺絲起子也能繼續用!

這就像程式裡的框架:
框架只是幫忙的工具,不是房子的骨架。
骨架(核心邏輯)要自己蓋,
這樣工具壞了、更新了都不怕。

在程式中的應用是什麼?

在 AI 專案裡,我們常用不同的框架:

  • HuggingFace:拿來載模型;
  • OpenAI API:拿來問 AI 問題;
  • Firebase、Supabase:幫忙存資料。

這些都屬於「外部世界」。
我們會讓他們待在最外圈,透過 Adapter 跟核心互動。

範例(JavaScript 模擬):

// 核心邏輯:定義 AI 要做什麼
class AIUseCase {
  constructor(provider) {
    this.provider = provider; // 依賴外部驅動
  }

  async ask(question) {
    const answer = await this.provider.getAnswer(question);
    return `AI 說:${answer}`;
  }
}

// 外圍框架:像 OpenAI 的 API
class OpenAIProvider {
  async getAnswer(q) {
    // 模擬呼叫外部 API
    return `(OpenAI 回答)${q} 是個好問題!`;
  }
}

// 換另一個框架:HuggingFace
class HuggingFaceProvider {
  async getAnswer(q) {
    return `(HuggingFace 回答)${q} 聽起來不錯喔!`;
  }
}

// 主程式:可以自由換框架
const openAI = new AIUseCase(new OpenAIProvider());
const hfAI = new AIUseCase(new HuggingFaceProvider());

openAI.ask("你喜歡貓嗎?").then(console.log);
hfAI.ask("你喜歡貓嗎?").then(console.log);

這樣設計的好處:

  • 外部框架可以自由替換
  • 核心邏輯(AIUseCase)不需要改
  • 程式更安全、更穩定。

小結與一個思考問題:

Frameworks & Drivers 是程式世界的「工具箱」,
幫我們跟外部世界連線。
但真正的房子(核心邏輯)要自己設計,
這樣工具壞了也不會垮。

思考問題:

如果你有一個「AI 工具箱」,
裡面只能放三個外部工具,你會選哪三個?為什麼?


上一篇
Day 24:Interface Adapters:翻譯的魔法
系列文
Clean Architecture 無瑕的程式碼:國中生阿吉的暑期閱讀筆記25
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言