前端開發 (Front-end Development)
- 任務:使用 HTML、CSS 和 JavaScript 建立使用者介面 (UI),確保響應式設計和優質的使用者體驗 (UX)。
- 職責:
- 響應式設計:確保網站在不同螢幕尺寸和裝置上都能正常顯示。
- 可訪問性:讓身心障礙人士也能順利使用網站。
- 客戶端安全:實施基本的客戶端安全措施以保護使用者資料。
- 使用 Docker 將應用程式及其相依性打包到容器中,確保其應用程式在開發、測試和生產環境中的行為一致。
後端開發 (Back-end Development)
- 任務:管理伺服器、資料庫以及處理資料的 API,確保後端能高效支援前端功能。
- 職責:
- API 開發:建立和維護應用程式介面 (API),允許不同系統之間進行通訊。
- 資料管理:高效且安全地儲存和檢索資料。
- 系統可靠性:確保後端系統平穩運行,最小化停機時間並及時解決錯誤。
資料庫管理 (Database Management)
- 設計和維護資料庫,以安全地儲存和檢索資料。
安全性 (Security)
- 在應用程式各層實施加密和身份驗證等安全措施。
DevOps 與部署 (DevOps and Deployment)
- 使用 CI/CD (持續整合/持續部署) 管道自動化和管理應用程式部署。
- Continuous Integration (CI) 持續整合 : 會經常將程式碼變更合併到共用程式碼庫中,並自動進行測試。這有助於及早發現錯誤,提高程式碼穩定性,並避免團隊協作時出現整合衝突。
- Continuous Deployment (CD) 持續部署 : 以 CI 為基礎,在程式碼通過所有測試後自動發佈到生產環境。這確保更新能夠快速送達用戶,無需手動審批步驟,從而支援更快的功能交付和更靈敏的錯誤修復。
測試與偵錯 (Testing and Debugging)
- 持續測試並修復問題,以維持應用程式的高效能。
前端技術
- HTML:建構網頁內容的骨架。
- CSS:定義網頁的版面、顏色和字型。
- JavaScript:增加互動性,如表單驗證或動態內容更新。
- 框架:通常使用如 React 或 Vue.js 等框架來簡化開發流程。
後端技術
- 程式語言:C#、Python、Ruby 等。
- 資料庫:SQL (如 SQL Server) 和 NoSQL (如 MongoDB) 等。
1.規劃與設計 (Planning and Design):收集需求並定義技術規格。
2.開發 (Development):建構前端使用者介面和後端邏輯。
3.整合 (Integration):將前端與後端 API 和服務連接。
4.測試 (Testing):透過全面測試驗證應用程式功能是否符合預期。
5.部署 (Deployment):啟動應用程式並持續監控其效能。
問題分解方法
- 由上而下 (Top-down):從系統的總體概述開始,逐步將其分解為更小、更易於管理的部分。
- 自下而上 (Bottom-up):從小的、獨立的功能模組開始建構,然後將它們整合成一個全面的解決方案。
模組化 (Modularization)
- 將每個核心功能開發為獨立的模組,再整合到主應用程式中。這種方法使每個部分都專注於特定任務,從而簡化開發和偵錯。
常見設計模式
- 工廠模式 (Factory Pattern):當需要根據不同條件建立不同類型的物件時使用,隱藏了物件建立的複雜細節。
- 觀察者模式 (Observer Pattern):當一個物件的狀態改變時,需要自動通知其他多個物件。實現了一對多的依賴關係。
- 裝飾器模式 (Decorator Pattern):在不改變物件原始碼的情況下,動態地增加新功能,提供彈性的功能擴展。
- 單例模式 (Singleton Pattern):確保一個類別在整個應用程式中只有一個實例,例如資料庫連線或日誌記錄器,以節省資源並方便管理。
1.安裝 .NET SDK:從 .NET 官方網站下載並安裝。
2.驗證安裝:在終端機執行 dotnet –version。
3.安裝 VS Code 擴充功能:
- C# Dev Kit & C#:提供 C# 語言支援。
- Microsoft Copilot:AI 輔助程式碼完成。
- IntelliSense:提供程式碼上下文提示。
4.建立專案:在終端機中導航到目標目錄,執行 dotnet new <template-name>(例如 dotnet new console 或 dotnet new webapi)。
5.安裝 NuGet 套件:使用 dotnet add package <package-name> 指令,例如:
- Newtonsoft.Json:處理 JSON 資料。
- Dapper:輕量級資料庫 ORM。
- Serilog:結構化日誌記錄。
- Microsoft.EntityFrameworkCore.SqlServer:連線 SQL Server。
- Microsoft.AspNetCore.SignalR:實現即時通訊。
6.建構與執行:
- dotnet build:編譯專案。
dotnet watch:監控檔案變更並自動重新啟動應用程式。
Program.cs:應用程式的入口點。
.csproj 檔案:包含專案設定、依賴項(NuGet 套件)和建置配置。
bin 資料夾:儲存已編譯的可執行檔和 DLL。
obj 資料夾:儲存建置過程中產生的中間暫存檔案。
專案建立
- 建立後端 API:dotnet new webapi -o backend
- 建立前端 UI:dotnet new blazorwasm -o frontend
- 同時開啟兩個專案進行開發。
啟用跨域請求 (CORS)
- 在後端 Program.cs 中,使用 builder.Services.AddCors(…) 註冊服務,並在 HTTP 請求管道中使用 app.UseCors(…) 啟用它。這是解決前後端不同來源通訊問題的關鍵。
API 呼叫與資料模型
- 後端:使用 app.MapGet(“/api/endpoint”, …) 定義 API 端點。
- 前端:
- 確保前端的資料模型 (C# public class) 與後端回傳的 JSON 結構完全一致。
在 Blazor 元件的 OnInitializedAsync 方法中,使用 HttpClient.GetFromJsonAsync<T>(…) 呼叫後端 API。
LocalStorage (長期記憶):資料會永久儲存在使用者的瀏覽器中,即使關閉瀏覽器也不會消失。適合儲存使用者偏好設定(如主題)。
SessionStorage (短期記憶):資料只在當前的瀏覽器分頁會話中有效,一旦分頁或瀏覽器關閉,資料就會被清除。適合儲存臨時資料(如購物車)。
實作範例
安裝:dotnet add package Blazored.LocalStorage
安裝:dotnet add package Blazored.SessionStorage
註冊服務 (在 Program.cs 中):builder.Services.AddBlazoredLocalStorage();
builder.Services.AddBlazoredSessionStorage();
在 C# 元件中使用 (StorageDemo.razor):
@page “/storage-demo”
@inject ILocalStorageService LocalStorage // 長期記憶
@inject ISessionStorageService SessionStorage // 短期記憶
<h3>本機儲存與會話儲存示範</h3>
<h4>長期記憶 (主題偏好)</h4>
<p>主題偏好: <strong>@themePreference</strong></p>
<button @onclick=”SetTheme”>切換主題到 ‘Dark'</button>
<hr>
<h4>短期記憶 (購物車數量)</h4>
<p>當前購物車商品數: <strong>@cartCount</strong></p>
<button @onclick=”AddItem”>增加商品 (+1)</button>
<button @onclick=”ClearCart”>清空購物車 (短期記憶)</button>
@code {
private string themePreference = “Loading…”;
private int cartCount = 0;
// 定義儲存的鍵名
private const string ThemeKey = “userTheme”;
private const string CartKey = “tempCartCount”;
// 1. 元件初始化時,讀取兩種記憶
protected override async Task OnInitializedAsync()
{
// 讀取長期記憶:從 LocalStorage 讀取主題偏好 (string)
// 如果找不到,使用預設值 “Light”
themePreference = await LocalStorage.GetItemAsStringAsync(ThemeKey) ?? “Light”;
// 讀取短期記憶:從 SessionStorage 讀取購物車數量 (int)
// GetItemAsync<T> 會自動處理反序列化 (JSON -> C#)
cartCount = await SessionStorage.GetItemAsync<int?>(CartKey) ?? 0;
}
// 2. 寫入長期記憶 (主題偏好)
private async Task SetTheme()
{
themePreference = “Dark”;
// 程式碼功能:將 ‘Dark’ 這個值永久儲存到用戶的瀏覽器中。
// (即使關閉並重開瀏覽器,資料依然存在)
await LocalStorage.SetItemAsStringAsync(ThemeKey, themePreference);
}
// 3. 寫入與更新短期記憶 (購物車)
private async Task AddItem()
{
cartCount++;
// 程式碼功能:將新的購物車數量儲存到 SessionStorage 中。
// (一旦用戶關閉瀏覽器視窗或分頁,資料就會被自動清除)
await SessionStorage.SetItemAsync(CartKey, cartCount);
}
private async Task ClearCart()
{
cartCount = 0;
// 程式碼功能:移除購物車的短期記憶。
await SessionStorage.RemoveItemAsync(CartKey);
}
}
dotnet watch 來預覽
快取 API 回應 (Caching):將不常變動但頻繁存取的資料(如產品類別)暫存在記憶體或瀏覽器儲存中,避免重複的伺服器請求。
資料分頁 (Pagination):將大型資料集分解為小區塊進行傳輸,使用資料網格或無限滾動來動態載入,提高應用程式的回應速度。
速率限制 (Rate Limiting):控制指定時間內客戶端可以發送的請求數量,防止伺服器過載。
身份驗證令牌 (Authentication Tokens):使用 JWT 或 OAuth 等基於令牌的身份驗證系統來保護 API 存取。
授權與最小特權原則 (PoLP):僅授予使用者完成其任務所需的最低權限。
API 版本控制 (API Versioning):在 API 端點中包含版本識別碼(例如 /api/v1/),以便在不破壞舊客戶端的情況下進行升級。
使用 async/await:在 Blazor 中,所有 API 呼叫都應使用 async 和 await,以防止 UI 執行緒被阻塞,確保介面流暢。
非同步請求取消 (CancellationTokenSource):
目的:當使用者快速連續觸發請求(例如在搜尋框中打字)時,取消先前的、已過時的請求,只處理最新的請求。這可以防止競態條件(舊資料覆蓋新資料)並節省網路資源。
實作流程:
1.取消先前請求:在發出新請求前,呼叫 cts?.Cancel()。
2.建立新訊號源:cts = new CancellationTokenSource()。
3.傳遞 Token:將 cts.Token 傳遞給非同步方法,如 Http.GetFromJsonAsync(…)。
4.處理取消例外:使用 try-catch 區塊捕捉 OperationCanceledException。
使用者輸入 “A” → 建立 cts1 → 發出請求 1(帶 cts1)。
使用者輸入 “AP” → 呼叫 cts1.Cancel()(請求 1 停止) → 建立 cts2 → 發出請求 2(帶 cts2)。
SignalR 即時推送:
- 方法: 使用 FeedHub 將 按讚 和 評論 的事件主動 (Clients.All.SendAsync) 推送給所有客戶端。
- 優化效果: 實現真正的即時通知,避免客戶端不斷輪詢伺服器,減輕伺服器負載。
分組與最小化更新:
- 方法: 伺服器端不推送完整的貼文對象,而只推送 postId 和 newLikes 這兩個變動的最小數據。
- 優化效果: 減少了網路傳輸量。客戶端只需更新 DOM 樹上一個數字,而不是重新渲染整個複雜的貼文列表。
延遲加載 (Lazy Loading):
- 方法: 每次只呼叫 API 載入 PageSize 數量的貼文,並使用 LoadMorePosts 函數來控制分批載入。
優化效果: 顯著減少了初始加載時間,提高了應用程式的可擴展性,使用者體驗更流暢。
連線失敗:通常由錯誤的伺服器 URL 或網路問題引起。
資料格式不符:前後端的 JSON 結構不一致,導致反序列化失敗(檢查 public class)。
CORS 錯誤:後端未正確配置 CORS 策略,導致瀏覽器基於安全原因封鎖跨域請求。
效能瓶頸:大量資料傳輸或低效率的查詢導致應用程式緩慢。
SSL 憑證錯誤 (ERR_SSL_PROTOCOL_ERROR):
- 原因: Blazor WASM 在開發環境中,瀏覽器不信任後端 API 的自簽署 HTTPS 憑證。
解決方案: 在命令列執行 dotnet dev-certs https –trust 來信任憑證。如果仍失敗,請將前端呼叫後端的協定從 https 暫時改為 http,繞過瀏覽器的嚴格憑證檢查。
流程圖是規劃和理解複雜邏輯的強大工具,尤其適用於設計如登入、註冊等流程。
- 標準符號
- 橢圓:標記流程的起點和終點。
- 矩形:表示一個流程或操作(例如「輸入憑證」)。
- 菱形:代表一個決策點(是/否 或 真/假)。
- 箭頭:指示流程的方向和順序。
- 建立步驟
- 定義流程:明確起點、終點和關鍵步驟。
- 確定關鍵步驟:將流程分解為單獨的步驟和決策點。
- 繪製流程圖:使用標準符號繪製。
驗證流程圖:檢查是否有缺失、順序錯誤或不明確的決策點。
全端開發人員的任務:
Front-end development: 前端開發:
- 使用 HTML、CSS 和 JavaScript 建立使用者介面。
- 確保響應式設計和使用者友好的體驗。
Back-end development: 後端開發:
- 管理資料庫、伺服器和資料處理的 API。
- 確保後端有效地支援前端功能。
Database management: 資料庫管理:
- 設計和維護資料庫以安全地儲存和檢索資料。
Security: 安全:
- 實施加密和身份驗證等安全措施。
DevOps and deployment: DevOps 與部署:
- 使用 CI/CD 管道自動化和管理應用程式部署。
Testing and debugging: 測試和調試:
- 不斷測試並修復問題以保持高效能。