Files
2meet-data-optimizer/DESIGN.md
T
wpdev d36bb954d1 chore: initial snapshot of 2meet-data-optimizer v0.1.0
Baseline before backporting wp-data-optimizer v3.0.1-v3.4.6.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TbG1keQQ7XBa7qMQY16KCY
2026-07-31 05:06:36 +08:00

4.4 KiB
Raw Blame History

DESIGN — 2meet Data Optimizer 架構決策

設計目標(pillars

  1. Zero-side-effect:未啟用任何 zone 的站台應感受不到此外掛存在
  2. Non-destructive:所有操作可 rollbacksnapshot + 7-state FSM
  3. Schema-first:所有欄位需明確 register,禁止隱式 mapping
  4. Hook-bus only:所有寫入必經 Hook Bus;禁止繞過 interceptor 直 SQL
  5. Anti-EAV strict:紅線禁止 SELECT FROM wp_*meta(除一次性 migration / cron

七態 FSM 模組生命週期

  ┌──────────────────────────────────────────────┐
  │                                              │
  v                                              │
idle ──→ dual_write ──→ backfill ──→ verify ──→ cutover ──→ cleanup ──→ complete
                                       │            │
                                       └─ rollback ─┘
可逆
idle wp_*meta wp_*meta
dual_write wp_*meta + zone wp_*meta
backfill wp_*meta + zone wp_*meta
verify wp_*meta + zone wp_*meta
cutover wp_*meta + zone zone ✓ (rollback to verify)
cleanup zone only zone ✗ (postmeta 已 DROP)
complete zone only zone

四象限分配原則

Zone 條件 範例
Hot 同欄位被 meta_query 過濾或 ORDER BY 排序 _price, hp_featured
Warm 高頻寫入 / 短 TTL / 弱一致性 view counter, hourly flag
Cold 長文本 / 不被搜尋 / 顯示用 _description, social links JSON
Archive 過期資料 / gzip 壓縮 expired listings 歷史欄位

TMDO_Zone_Classifier 自動分析(transient 1h),但人工 register 永遠優先。


Hook Bus 架構

Hook Bus 是寫入唯一真理之源。任何外掛要參與反 EAV 必須:

// 註冊
add_action( 'tmdo_register_entity_fields', function ( $registry_class ) {
    $registry_class::register_group( 'user', 'my_group', [...] );
} );

// 訂閱事件
add_action( 'tmdo_after_write', function ( $type, $id, $key, $value, $result ) {
    // ... cross-domain logic
} );

禁止直接 hook update_user_meta / add_post_meta(會與 Hook Bus 衝突,CI gate 偵測)。


Schema Registry 雙軌

  • TMDO_Schema_Registrypost entity 的 zone 欄位(HP listing 模式)
  • TMDO_Entity_Registry4 entity 通用 groupuser/post/term/comment

兩者並存原因:post zone 模式較成熟,user/term/comment 較新;最終 v0.3.0 會收斂為單一 registry。


Custom Table Registry

第三方外掛的自訂表可註冊到 TMDO_Custom_Table_Registry 享有:

  • wp tmdo doctor 表結構檢查
  • Schema drift 偵測(CREATE 與 DROP 對齊)
  • Benchmark 整合(可選 benchmark_callback
  • 衝突偵測

僅限 schema 監控,不會被 Hook Bus 攔截寫入。


為什麼資料表沿用 wp_wpdo_* 不 rename 為 wp_tmdo_*

  • 避免 v2.16.0 → v0.1.0 資料遷移的成本與風險
  • 兩外掛同時存在時 schema 完全相容(互斥啟動)
  • v0.2.0 後若決定 rename 再做(屆時提供 wp tmdo migrate-from-wpdo

為什麼公開 API 同時暴露 TMDO_API + WPDO_API (alias)

  • class_alias( 'TMDO_API', 'WPDO_API' ) 確保 hub-core / spoke-sso / 其他 consumer 零修改可用
  • wpdo_* hook 與 tmdo_* hook 並存 dual-fire
  • 過渡期 ≥ 2 個 minor 版本後加 _doing_it_wrong deprecation notice

CSS 設計系統

承襲父環境奶油莫蘭迪設計系統(見 wp-local-dev/CLAUDE.md § 設計系統):

  • 顏色:var(--color-*),禁止 HEX 硬編碼
  • 間距:var(--space-*) 8px 倍數
  • 圓角:var(--radius-*)
  • 按鈕最小高度 44px
  • 過渡:var(--ease-default) + var(--duration-normal)

詳見 admin/assets/wpdo-admin.css(從 wp-data-optimizer v2.16.0 搬入)。


反 EAV 8 維評分(自評)

承襲 wp-data-optimizer 8 維 anti-EAV 評分標準,目標 v0.1.0 達 9.5+/10

  1. Schema-first registration
  2. Hook Bus single source of truth
  3. No direct wp_*meta SELECT in app code
  4. Custom table registry 全覆蓋
  5. Sync Bridge dual-write + cutover
  6. Query Router pre_get_posts 改寫
  7. Snapshot + rollback 機制
  8. Conflict detection + CI gate