軟體架構 - daniel-qa/Vue GitHub Wiki

  • 軟體架構 (Software Architecture) - 三層架構(3-tier)
Optimized Small Project Architecture
├─ Frontend (Vue)
│  ├─ Pages & Components
│  ├─ State Management (Vuex / provide-inject)
│  ├─ API Clients & Adapters
│  ├─ UI Flow / Routing
│  └─ View Models / UI Mapping
│
├─ Application Layer
│  ├─ Use Cases (ShareVolume, ...)
│  ├─ Conversion Services (Periods / Grades / Subjects)
│  ├─ Validation Services
│  └─ DTOs & Data Adapters (Backend ↔ Frontend)
│
├─ Backend
│  ├─ Controllers (REST API)
│  ├─ Application Services (Business Logic)
│  ├─ Domain Models (Volume / VolumeShare / School)
│  ├─ Repositories (DB Access)
│  └─ Mappers / Policies
│
└─ Data Layer
   ├─ Tables / Collections
   ├─ Relationships / Embeds
   └─ Indexes / Constraints
  • Mappers & Policies 在架構裡的關係
Controller → Service → (Domain Model)
                           │
                           ├─ Mappers  → 轉換資料格式
                           └─ Policies → 驗證權限 / 商業規則

Mapper = 轉換資料

Policy = 驗證規則


傳統 3-tier = 前端 / 後端 / DB

你的 4 層 = 前端 / 功能層 / 核心後端 / DB

功能層是把「後端裡面的一層」拆出來,讓專案更易維護


適合: 小團隊,一人開發,時間有限,功能不會爆炸性成長

維護週期 1~3 年的 Web App

├─ 前端層 (Frontend / Vue)
│  ├─ Page / Component  對應資料模型
│  ├─ State Management (Vuex / provide-inject)
│  └─ UI 與業務流程
│
├─ 後端層 (Backend / API / Business Logic)
│  ├─ API
│  │  ├─ find-share
│  │  ├─ get-volumeshare
│  │  ├─ set-volumeshare-source
│  │  └─ set-volumeshare-target
│  ├─ 分享流程處理 (Sharer → Target)
│  └─ 轉換表映射 (periods / grades / subjects)
│
└─ 資料層 (Database / Data Model)
   ├─ 核心實體 (Volume / VolumeShare / School)
   ├─ 關聯關係 (Volume ↔ VolumeShare / VolumeShare ↔ School)
   └─ ERD / Document 結構 (NoSQL / Reference + Embed)

名詞概念

Domain Model = 「業務導向」

Entity / Object = 「程式導向」

Data Model = 「資料導向」

Domain Model = 「真實世界的東西怎麼在程式裡表達」

不管 DB 怎麼設

可以包含方法、規則、行為

Data Model = 「資料庫裡資料怎麼長」

不管程式邏輯

只管欄位、型別、索引

API 不要直接碰 DB,業務流程不要直接碰前端格式, 就已經是「小型後端乾淨架構」了


Document / NoSQL 模型

因為你是用 Cosmos DB,資料主要存成 Volume、VolumeShare 兩種 document,再用 ID 參照:

Volume = 內容主體(課綱冊)

VolumeShare = 映射/轉換表(來源 → 目標)

這種方式在 NoSQL 世界常叫:

Reference-based Document Design

或 Hybrid Document Model (Reference + Embedded Arrays)

意思是:核心資料用 reference,多對多映射用嵌入陣列。