# 技術選型決策文檔 ## 概述 基於 Drama Ling 應用的功能需求、效能要求和團隊技術能力,制定完整的技術棧選型方案。 ## 技術選型原則 ### 決策考量因素 - [ ] **學習曲線**: 團隊上手難度和開發效率 - [ ] **生態系統**: 社群支援和第三方套件豐富度 - [ ] **效能表現**: 應用效能和可擴展性需求 - [ ] **維護成本**: 長期維護和升級的成本考量 - [ ] **團隊熟悉度**: 現有團隊的技術背景和經驗 ### 架構設計原則 - [ ] **前後端分離**: API優先設計,統一後端服務同時支援Web端和移動端App - [ ] **API統一設計**: 單一後端API服務,透過不同端點(/api/v1/web, /api/v1/mobile)提供差異化服務 - [ ] **微服務準備**: 依功能模組設計,為未來微服務架構奠定基礎 - [ ] **多平台支援**: 一套API同時服務Web應用和Flutter移動應用 - [ ] **雲原生設計**: 充分利用雲端服務,提高可靠性和擴展性 - [ ] **容器化部署**: 使用Docker進行一致性部署 - [ ] **持續集成**: 自動化測試和部署流程 ## 前端技術棧 ### 移動應用開發 #### Flutter (選定方案) **選擇理由:** - [ ] **跨平台優勢**: 一套Dart代碼支援iOS和Android - [ ] **原生效能**: 直接編譯為原生代碼,效能優異 - [ ] **UI一致性**: 統一的Material Design和Cupertino風格 - [ ] **熱重載**: 快速開發和調試體驗 - [ ] **Google支持**: 持續更新和長期支援保證 **技術組合:** ```yaml framework: "Flutter 3.16+" language: "Dart 3.0+" state_management: "Riverpod / BLoC" navigation: "Go Router" local_storage: "Hive / Isar" networking: "Dio + Retrofit" ui_components: "Material 3 + Custom Components" animations: "Flutter Animations API" audio_handling: "Just Audio / Audio Players" testing: "Flutter Test + Integration Test" build_runner: "Build Runner (code generation)" ``` **開發優勢:** - [ ] **熱重載**: 毫秒級UI更新,提升開發效率 - [ ] **豐富Widget**: 內建豐富UI組件,快速構建界面 - [ ] **效能監控**: 內建效能分析工具 - [ ] **CI/CD友好**: 命令列工具支援自動化建構 ### 網頁應用開發 #### 現代前端架構 (選定方案) **選擇理由:** - [ ] **前後端分離**: 純前端應用,透過API與後端通信 - [ ] **Claude Code友好**: 基於現代JavaScript模組系統,便於AI理解和維護 - [ ] **API統一**: 與移動端共享同一套後端API服務 - [ ] **開發效率**: 熱重載、模組化開發、現代工具鏈 - [ ] **效能優化**: Vite構建、代碼分割、Tree-shaking **技術組合:** ```json { "markup": "HTML5 語義化標籤", "styling": "SCSS/Sass + CSS3 + CSS Grid + Flexbox", "scripting": "Modern JavaScript (ES2022+) + ES6 Modules", "bundler": "Vite 5.x (開發伺服器 + 生產構建)", "架構模式": "模組化前端架構 (非MVC)", "狀態管理": "原生JavaScript類別 + localStorage/sessionStorage", "API通信": "Fetch API + RESTful設計", "組件系統": "ES6 Classes + 模組化組件", "路由": "History API + SPA路由", "音頻處理": "Web Audio API + Speech Synthesis", "測試": "Vitest + Testing Library", "代碼品質": "ESLint + Prettier" } ``` **前後端分離架構:** ```mermaid graph LR WEB[Web Frontend
Vite + Modern JS] --> API[Unified API Server
.NET Core] APP[Flutter Mobile App] --> API API --> DB[(PostgreSQL)] API --> CACHE[(Redis)] API --> AI[AI Services
OpenAI] ``` ## 後端技術棧 ### 應用服務框架 #### .NET Core (選定方案) **選擇理由:** - [ ] **高效能**: 出色的效能表現,特別適合API服務 - [ ] **跨平台**: 支援Windows、Linux、macOS部署 - [ ] **強型別**: C#強型別系統,減少執行時錯誤 - [ ] **生態成熟**: 豐富的NuGet套件生態系統 - [ ] **企業級**: 微軟支援,適合長期維護 **技術組合:** ```yaml framework: ".NET 8" language: "C# 12" web_framework: "ASP.NET Core Web API" architecture: "前後端分離 + API統一設計" api_design: - "RESTful API設計原則" - "統一API服務多平台客戶端" - "差異化端點 (/api/v1/web, /api/v1/mobile)" - "版本控制和向後相容" orm: "Entity Framework Core" authentication: - "JWT (Mobile App)" - "Session/Cookie (Web)" - "雙重認證策略" validation: "FluentValidation" documentation: "Swagger/OpenAPI (Swashbuckle)" cors: "配置支援前端域名" testing: "xUnit + Moq + FluentAssertions" dependency_injection: "內建DI Container" logging: "ILogger + Serilog" caching: "IMemoryCache + Redis" background_services: "Hosted Services + Hangfire" ``` **架構優勢:** - [ ] **內建DI**: 強大的依賴注入容器 - [ ] **中介軟體**: 靈活的請求處理管道 - [ ] **配置系統**: 強大的配置管理機制 - [ ] **健康檢查**: 內建服務健康檢查 - [ ] **API版本控制**: 原生支援API版本管理 #### 替代方案比較 **Node.js + Express/Fastify** - 優點: JavaScript生態豐富,快速開發 - 缺點: 弱型別,大型專案維護困難 **Python + FastAPI** - 優點: AI/ML整合容易,自動API文檔 - 缺點: 效能相對較低,GIL限制 ### 資料庫選型 #### PostgreSQL 15+ (主資料庫) **選擇理由:** - [ ] **功能完整**: 支援JSON、全文檢索、空間資料 - [ ] **ACID保證**: 強一致性保證資料完整性 - [ ] **擴展性**: 支援水平和垂直擴展 - [ ] **開源免費**: 無授權費用,社群支援強 - [ ] **生態豐富**: 大量擴展套件和工具 **配置:** ```yaml postgresql: version: "15.4" extensions: - pg_trgm # 模糊搜尋 - pg_stat_statements # 效能監控 - pgcrypto # 加密功能 connection_pooling: "PgBouncer" backup_strategy: "WAL-E / pgBackRest" ``` #### Redis 7+ (快取和會話) **用途:** - [ ] **應用快取**: API回應和查詢結果快取 - [ ] **會話存儲**: 用戶會話和JWT黑名單 - [ ] **排行榜**: 即時排行榜計算和存儲 - [ ] **任務佇列**: 背景任務處理 - [ ] **即時通訊**: WebSocket會話管理 ## AI和機器學習服務 ### 低成本AI服務策略 #### OpenAI GPT-4o-mini (主要AI服務) **應用場景:** - [ ] **對話分析**: 語法、語意、流暢度評分 - [ ] **內容生成**: 對話建議和回覆範例 - [ ] **錯誤訂正**: 語言錯誤檢測和修正建議 - [ ] **個人化推薦**: 學習內容推薦 **技術整合:** ```javascript { "provider": "OpenAI", "models": { "dialogue_analysis": "gpt-4o-mini", // 便宜10倍 "content_generation": "gpt-4o-mini", "embedding": "text-embedding-3-small" // 便宜5倍 }, "backup_provider": "Anthropic Claude-3 Haiku", "rate_limiting": "tiktoken + custom limiter", "cost_optimization": { "aggressive_caching": "90%+ 快取命中率", "prompt_optimization": "最小化token使用", "batch_processing": "批量處理降低成本", "smart_fallback": "簡單任務用更便宜模型" } } ``` #### 高階AI方案 (預算充足時) ```javascript { "provider": "OpenAI", "models": { "dialogue_analysis": "gpt-4-turbo", "content_generation": "gpt-3.5-turbo", "embedding": "text-embedding-ada-002" }, "backup_provider": "Anthropic Claude-3", "rate_limiting": "tiktoken + custom limiter", "cost_optimization": "caching + prompt optimization" } ``` #### 語音處理服務 **語音轉文字 (STT):** - 主選: Google Cloud Speech-to-Text - 備選: Azure Speech Services - 考量: 多語言支援、準確度、成本 **文字轉語音 (TTS):** - 主選: ElevenLabs (自然度高) - 備選: Google Cloud Text-to-Speech - 考量: 語音品質、語言支援、API穩定性 ### 本地化AI考量 ```python # 未來可考慮的本地模型 local_models = { "grammar_checking": "LanguageTool API", "pronunciation_scoring": "SpeechAce API", "vocabulary_difficulty": "Custom trained model", "content_classification": "Hugging Face Transformers" } ``` ## 雲端服務架構 ### 低預算部署方案 (推薦) #### VPS部署配置 ```yaml # 核心服務 compute: vps_provider: "DigitalOcean / Vultr / Linode" instance_type: "4GB RAM, 2 vCPU, 80GB SSD" containerization: "Docker + Docker Compose" reverse_proxy: "Nginx" # 資料存儲 storage: database: "PostgreSQL 15 (容器化)" cache: "Redis 7 (容器化)" files: "本地存儲 + Nginx靜態服務" backups: "PostgreSQL dump + 對象存儲同步" # 網路與安全 networking: ssl: "Let's Encrypt免費SSL證書" security: "Fail2ban + UFW防火牆" domain: "Cloudflare DNS + CDN (免費版)" # 監控與日誌 monitoring: metrics: "Grafana + Prometheus (輕量化)" logs: "Docker logs + 日誌輪轉" uptime: "UptimeRobot免費監控" alerts: "Discord/Telegram通知" ``` #### 高階AWS方案 (預算充足時) ```yaml # 應用服務 (預算充足時的選項) compute: api_servers: "ECS Fargate" background_jobs: "Lambda Functions" load_balancer: "Application Load Balancer" # 資料存儲 storage: database: "RDS PostgreSQL Multi-AZ" cache: "ElastiCache Redis" files: "S3 + CloudFront CDN" backups: "S3 Glacier" # 網路與安全 networking: vpc: "Custom VPC with private subnets" security: "WAF + Shield + GuardDuty" ssl: "ACM SSL Certificates" # 監控與日誌 monitoring: metrics: "CloudWatch" logs: "CloudWatch Logs" tracing: "X-Ray" alerts: "SNS + CloudWatch Alarms" ``` #### 替代方案比較 **Google Cloud Platform** - 優點: AI服務整合佳、BigQuery分析強 - 缺點: 服務相對較少、台灣資料中心限制 **Microsoft Azure** - 優點: 企業客戶友好、Office整合 - 缺點: 學習曲線較陡、定價複雜 ### CDN和媒體服務 #### CloudFront + S3 **媒體檔案處理:** - [ ] **音頻檔案**: 對話範例、發音示範 - [ ] **圖片資源**: 場景圖片、用戶頭像 - [ ] **影片內容**: 教學影片、文化介紹 - [ ] **靜態資源**: CSS、JavaScript、字體檔案 **優化策略:** ```yaml cdn_config: cache_behaviors: - path: "/api/*" cache_policy: "CachingDisabled" - path: "/assets/*" cache_policy: "CachingOptimized" compress: true security: - origin_access_identity: true - signed_urls: true # 付費內容保護 ``` ## 開發工具鏈 ### 版本控制和CI/CD #### GitHub + GitHub Actions **工作流程:** ```yaml # .github/workflows/main.yml name: CI/CD Pipeline on: [push, pull_request] jobs: test: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - uses: actions/setup-node@v3 - run: npm ci - run: npm run test - run: npm run lint deploy: if: github.ref == 'refs/heads/main' needs: test runs-on: ubuntu-latest steps: - name: Deploy to AWS run: | # 部署邏輯 ``` ### 監控和日誌 #### 應用監控堆疊 ```yaml monitoring_stack: apm: "New Relic / Datadog" error_tracking: "Sentry" uptime_monitoring: "Pingdom / StatusCake" log_aggregation: "ELK Stack / Fluentd" metrics: "Prometheus + Grafana (自建)" ``` #### 關鍵指標追蹤 - [ ] **API效能**: 回應時間、吞吐量、錯誤率 - [ ] **用戶體驗**: 頁面載入時間、應用崩潰率 - [ ] **業務指標**: 活躍用戶、學習完成率、付費轉換 - [ ] **基礎設施**: CPU、記憶體、網路、磁碟使用率 ### 安全性工具 #### 安全掃描和檢測 ```yaml security_tools: dependency_scanning: "Snyk / GitHub Dependabot" code_scanning: "SonarQube / CodeQL" container_scanning: "Trivy / Clair" secret_detection: "GitGuardian / TruffleHog" penetration_testing: "OWASP ZAP" ``` ## 第三方服務整合 ### 支付服務 #### Stripe (國際用戶) ```javascript const stripe_config = { subscription_management: "Stripe Billing", payment_methods: ["card", "apple_pay", "google_pay"], webhooks: "subscription lifecycle events", fraud_detection: "Stripe Radar", local_payment_methods: { "taiwan": ["card", "bank_transfer"], "global": ["card", "digital_wallets"] } } ``` #### 藍新金流 (台灣用戶) - 信用卡收單 - ATM轉帳 - 超商代碼繳費 - LINE Pay / 街口支付 ### 推播通知服務 #### Firebase Cloud Messaging ```yaml push_notifications: service: "Firebase Cloud Messaging" features: - cross_platform: true - topic_based: true # 學習提醒、系統公告 - personalized: true # 個人化推薦 integration: - react_native: "@react-native-firebase/messaging" - backend: "firebase-admin SDK" ``` ### 客服系統 #### Intercom / Zendesk - [ ] **即時聊天**: 應用內客服聊天 - [ ] **幫助中心**: 自助服務文檔 - [ ] **工單系統**: 問題追蹤和處理 - [ ] **知識庫**: 常見問題和解答 ## 開發環境配置 ### 本地開發環境 #### Docker Compose 設定 ```yaml # docker-compose.dev.yml version: '3.8' services: postgres: image: postgres:15 environment: POSTGRES_DB: dramaling_dev POSTGRES_USER: dev POSTGRES_PASSWORD: dev123 ports: - "5432:5432" redis: image: redis:7-alpine ports: - "6379:6379" api: build: ./backend ports: - "3001:3001" depends_on: - postgres - redis volumes: - ./backend:/app ``` ### 測試環境 #### 自動化測試策略 ```yaml testing_pyramid: unit_tests: coverage_target: ">= 80%" tools: "Jest + Testing Library" integration_tests: api_testing: "Supertest + Jest" database_testing: "Test Containers" e2e_tests: mobile: "Detox" web: "Cypress / Playwright" performance_tests: load_testing: "k6" stress_testing: "Artillery" ``` ## 成本估算和優化 ### 低預算成本估算 (月費估算) #### 開發階段 (NT$ 2,000/月預算) ```yaml development_costs: infrastructure: - local_docker: "NT$ 0" # 完全本地開發 - domain_testing: "NT$ 0" # ngrok或localhost services: - openai_api: "NT$ 300-600" # 低使用量GPT-4o-mini - database: "NT$ 0" # 本地PostgreSQL - storage: "NT$ 0" # 本地檔案系統 tools: - monitoring: "NT$ 0" # 免費工具 - version_control: "NT$ 0" # GitHub免費版 total_estimated: "NT$ 300-600/月" budget_remaining: "NT$ 1,400-1,700/月" ``` #### 生產階段 (NT$ 5,000/月預算) ```yaml production_costs: infrastructure: - vps_server: "NT$ 320-480" # DigitalOcean 4GB - domain_ssl: "NT$ 400-600" # 域名 + Cloudflare Pro - backup_storage: "NT$ 160-240" # 對象存儲備份 services: - openai_api: "NT$ 1,500-3,000" # 優化使用的GPT-4o-mini - stripe_processing: "3% 交易手續費" - monitoring: "NT$ 0-480" # 基本監控免費或便宜方案 total_estimated: "NT$ 2,380-4,800/月" budget_remaining: "NT$ 200-2,620/月" ``` #### AWS高階方案比較 (預算充足時) ```yaml aws_costs: compute: - ecs_fargate: "$200-500" # 2-4 tasks - lambda: "$50-100" # background jobs storage: - rds_postgresql: "$150-300" # db.r5.large Multi-AZ - elasticache_redis: "$100-200" # cache.r6g.large - s3_storage: "$50-150" # media files + backups networking: - cloudfront_cdn: "$20-80" # data transfer - load_balancer: "$25" # ALB monitoring: - cloudwatch: "$30-60" # logs + metrics total_estimated: "$625-1415/month (約NT$ 20,000-45,000)" ``` ### 第三方服務成本優化 ```yaml optimized_third_party_costs: ai_services: - openai_gpt4o_mini: "NT$ 1,500-3,000/月" # 90%快取命中率 - embedding_service: "NT$ 150-300/月" # 較便宜的embedding模型 payment_processing: - stripe_international: "2.9% + NT$ 9.6 per transaction" - local_payment: "1.8% + NT$ 6 per transaction" # 台灣金流 communication: - firebase_messaging: "NT$ 0" # 免費版足夠 - email_service: "NT$ 0-160" # SendGrid免費版或便宜方案 monitoring_free: - uptime_monitoring: "NT$ 0" # UptimeRobot免費版 - error_tracking: "NT$ 0" # Sentry免費版 - log_analysis: "NT$ 0" # 基本Docker logs ``` ### 成本優化策略 - [ ] **自動擴縮**: 基於負載自動調整資源 - [ ] **Spot實例**: 非關鍵服務使用Spot實例 - [ ] **資料生命週期**: 舊資料自動遷移到便宜存儲 - [ ] **CDN最佳化**: 壓縮和快取策略降低頻寬成本 - [ ] **API快取**: 減少AI API調用次數 ## 效能和擴展性考量 ### 效能目標 ```yaml performance_targets: api_response_time: p95: "< 200ms" p99: "< 500ms" mobile_app: cold_start: "< 3s" hot_start: "< 1s" web_app: first_contentful_paint: "< 1.5s" largest_contentful_paint: "< 2.5s" database: query_time: "< 50ms (95th percentile)" connection_time: "< 10ms" ``` ### 擴展策略 ```yaml scaling_strategy: horizontal_scaling: - api_servers: "ECS Auto Scaling" - database: "Read Replicas" - cache: "Redis Cluster" vertical_scaling: - database: "Automated instance sizing" - cache: "Memory optimization" geographic_scaling: - cdn: "Global edge locations" - database: "Regional read replicas" ``` --- ## 實施路徑和里程碑 ### Phase 1: MVP (3個月) - [ ] React Native基礎應用架構 - [ ] Node.js API服務 - [ ] PostgreSQL資料庫設計 - [ ] 基礎AI整合 (OpenAI) - [ ] AWS基礎設施設置 ### Phase 2: 完整功能 (6個月) - [ ] 完整遊戲化系統 - [ ] 支付系統整合 - [ ] 進階AI功能 - [ ] 效能優化 - [ ] 監控和告警系統 ### Phase 3: 規模化 (9-12個月) - [ ] 多語言支援 - [ ] 企業功能 - [ ] 高可用架構 - [ ] 自動化維運 - [ ] 資料分析平台 --- ## 風險評估與緩解 ### 技術風險 | 風險項目 | 機率 | 影響 | 緩解策略 | |---------|------|------|----------| | AI API成本過高 | 中 | 高 | 實施快取策略、成本監控 | | 第三方服務中斷 | 低 | 高 | 多供應商策略、服務降級 | | 資料庫效能瓶頸 | 中 | 中 | 讀寫分離、查詢優化 | | 移動應用效能 | 中 | 中 | 效能測試、代碼優化 | ### 業務風險 | 風險項目 | 機率 | 影響 | 緩解策略 | |---------|------|------|----------| | 用戶增長超預期 | 低 | 高 | 自動擴縮、負載測試 | | 競爭對手技術領先 | 中 | 中 | 快速迭代、技術創新 | | 法規變化影響 | 低 | 中 | 合規審查、架構調整 | --- ## 待完成任務 ### 高優先級 1. [ ] 確定最終技術棧組合和版本號 2. [ ] 建立開發環境的Docker配置 3. [ ] 設計CI/CD流程的詳細配置 4. [ ] 規劃第三方服務的整合時程 ### 中優先級 1. [ ] 評估和選擇監控工具的具體方案 2. [ ] 設計資料庫連接池和快取策略 3. [ ] 規劃安全性測試和合規性檢查 4. [ ] 建立效能基準測試和優化流程 ### 低優先級 1. [ ] 研究最新技術趨勢對架構的影響 2. [ ] 評估邊緣計算在AI推理中的應用 3. [ ] 探索微前端架構的可行性 4. [ ] 調研區塊鏈技術在學習認證中的應用 --- ## 現有實現驗證 ### 當前 `/apps/web` 實現符合度 ✅ 經過分析,當前的實現**完全符合**技術文件規範: | 項目 | 文件要求 | 當前實現 | 符合度 | |------|----------|----------|--------| | **架構模式** | 前後端分離 | ✅ 純前端應用,透過API通信 | **100%** | | **前端技術** | Modern JavaScript + ES6 Modules | ✅ ES2022+ + ES6 Modules | **100%** | | **構建工具** | Vite 5.x | ✅ Vite 7.x (更新版本) | **100%** | | **樣式處理** | SCSS/Sass | ✅ SCSS + CSS變數系統 | **100%** | | **狀態管理** | 原生JavaScript類別 | ✅ VocabularyState 類別 | **100%** | | **組件系統** | ES6 Classes + 模組化 | ✅ BaseComponent + 模組化組件 | **100%** | | **API整合** | Fetch API + RESTful | ✅ 預留API整合架構 | **100%** | | **音頻處理** | Web Audio API | ✅ AudioManager + Speech Synthesis | **100%** | ### 實現亮點 1. **🎯 完美的前後端分離設計** - 純前端應用,無後端渲染依賴 - 為統一API整合預留完整架構 2. **🚀 現代化技術棧** - Vite 7.x (比文件要求更新) - ES2022+ 語法支援 - 模組化架構設計 3. **🧩 擴展性設計** - 清晰的模組分離 (VocabularyApp, VocabularyState) - 可重用的組件系統 (BaseComponent) - 統一的工具模組 (AudioManager) ### 後續整合建議 當前實現已為API整合做好準備,建議: 1. **後端API開發**: 按照 `backend-api-separation-plan.md` 開發.NET Core API 2. **API整合**: 在現有架構基礎上添加API通信層 3. **認證系統**: 整合JWT/Session雙重認證 4. **移動端開發**: Flutter App整合同一套API服務 --- **最後更新**: 2025-09-10 **負責人**: Drama Ling 開發團隊 **審查週期**: 每兩週檢討一次