需求分析
- 目標平台:Android、iOS、Windows (UWP/WinUI)
- 核心功能:菜單瀏覽、下單、支付、推送、地理位置
- 團隊技術棧:C#/.NET 優勢明顯
推薦方案:Xamarin.Forms / .NET MAUI
| 維度 | Xamarin.Forms (成熟) | .NET MAUI (未來/現行) |
| 代碼共享率 | 90%+ (UI+邏輯) | 95%+ (含原生控件映射) |
| UI 渲染 | 各平台原生控件 | Handler 架構,效能更強 |
| 生態包 | NuGet 豐富,穩定 | 遷移中,部分庫需預覽版 |
| Windows 支援 | UWP 專案 | 原生 WinUI 3,桌面/平板一體 |
| 學習曲線 | 低(XAML + MVVM) | 同樣,新增 Shell/Handler 概念 |
架構分層建議
VisFood (Solution)
├── VisFood.Core // .NET Standard 2.1 / net6.0
│ ├── Models // DTO, Entity
│ ├── Services // IOrderService, IPaymentService
│ ├── ViewModels // MVVM (CommunityToolkit.Mvvm)
│ └── Utils // Extensions, Helpers
├── VisFood.Data // Repository 實現
│ ├── Local // SQLite (sqlite-net-pcl), Preferences
│ └── Remote // Refit/RestEazy 呼叫 WebAPI
├── VisFood.App // MAUI/Xamarin.Forms 專案
│ ├── Pages // XAML + Code-behind
│ ├── Controls // 自定義控件
│ ├── Platforms // Android/iOS/Windows 特定實現
│ └── AppShell.xaml // Shell 導航結構
└── VisFood.Tests // xUnit + Moq 單元/整合測試
關鍵技術點落地
- 離線優先:本地 SQLite 緩存菜單/訂單,
Connectivity.ConnectivityChanged 監聽網路恢復同步。
- 推送通知:Firebase (Android/iOS) + WNS (Windows),統一抽象
IPushService。
- 支付整合:WebView 載入支付頁,或原生 SDK (Google Pay / Apple Pay / Microsoft Store) 透過 DependencyService/Handler 呼叫。
- 地圖定位:
Xamarin.Essentials.Geolocation + 原生地圖控件 (MapControl/MapView/MKMapView)。
- CI/CD:GitHub Actions / Azure DevOps → 建構簽名包 → 分發到 App Center / Google Play Console / TestFlight / Microsoft Store。
避坑指南
- UI 執行緒:耗時操作必須
Task.Run 或 MainThread.InvokeOnMainThreadAsync。
- 生命週期:Android
OnPause/iOS ViewWillDisappear 中正確釋放資源、取消訂閱。
- 包體大小:啟用
Linker (Link all assemblies),移除未用元資料,APK/IPA 可減 30%+。
- 版本對齊:
TargetFramework、AndroidSdk、Xcode 版本在全團隊/建構機器強制一致。
替代方案快速對比
| 方案 | 優點 | 缺點 | 適合場景 |
| Flutter | 單代碼 UI、效能極佳、熱重載 | Dart 語言學習成本、原生互操作較繁瑣 | UI 高度客製化、團隊無 .NET 背景 |
| React Native | JS/TS 生態、Web 代碼復用 | 橋接效能、原生模塊維護難 | 前端團隊主導、需快速迭代 |
| 原生雙端 | 極致體驗、平台新特性首發 | 雙代碼庫、人力成本高 | 資源充足、長期深耕單平台 |
若團隊以 C#/.NET 為主技術棧,Xamarin/.NET MAUI 是性價比最高的三端共享方案,配合 MVVM + Repository + 依賴注入,可構建可維護、可測試、高復用的訂餐系統。