我已經做出了很多功能:AI、後端 CRUD、前端抓資料、登入。
接下來要把系統放到網路上用(這叫「部署」)。
元件是什麼?(用運動會來想像)
有些隊伍只能自己排隊(準備好),但需要跟別隊一起上場才有比賽。
也有些隊伍自己排隊完,就能自己上場完成一個比賽項目(像接力賽)。
在寫程式時,我們希望一個「元件」:
在 JavaScript/TypeScript 世界裡:
編譯 = 把程式轉成能跑的樣子(TS 轉 JS、壓縮、打包)。
部署 = 把結果放到網路上(像丟到 Vercel、Netlify、或用 Docker 跑)。
<template>
<form @submit.prevent="onSubmit" class="p-4">
...
</form>
</template>
<script setup lang="ts">
...
</script>
<style scoped>
...
</style>
// backend/src/usecases/providers/RuleBasedProvider.ts
import { AiProvider } from './AiProvider'
export class RuleBasedProvider implements AiProvider {
async format(content: string, prompt = ''): Promise<string> {
...
}
}
所以,「獨立編譯」是自己準備好,「獨立部署」是自己上場跑。
一個好元件,最好兩者都能做到。
我現在的專案中,有哪些部分「只能準備,不能單獨上場」?
如果把「檔案系統儲存」換成「S3 儲存」,哪些檔案需要改?(理想答案:只有 Provider 那層)
上線後還要多想什麼?
好的元件通常具備以下特質嗎?(後面會繼續看到)
高內聚:相關的程式碼放在一起,不會東一塊西一塊。
低耦合:對外只透過介面互動,不直接依賴內部細節。
可替換:例如把「檔案系統儲存元件」換成「S3 儲存元件」,其他程式不需要大改。
可測試:可以在沒有依賴完整系統的情況下進行單元測試。