Staging — 僅供部落格預覽。
跳至主要內容

四個介面,一組欄位

排程中

閱讀時間 5 分鐘 作者 NT²

如果「表單欄位」、「共用欄位」與「到期欄位」是三套不同的結構描述,它們終將產生分歧——而且會有人看見超出你本意的內容。單一使用中欄位集合,讓每個介面都保持誠實。

四個介面,一組欄位

主張:一組已解析的欄位集合,四項工作

可搜尋的中繼資料,封裝後的欄位值畫出了儲存邊界。這篇文章要收束結構化文件模型系列的第一條主線:欄位存在之後,產品如何使用它們。

主張是:編輯、檢視、呈現與功能,共享同一組使用中欄位。 這裡沒有一套表單結構描述、一套共用結構描述、一套到期結構描述剛好長得很像。只有一組針對這一列已解析好的語意欄位——範本配置加上任何逐項目的額外欄位——以及四個各自投影它的介面。

這聽起來像是使用體驗上的修飾。其實它是一條安全邊界。平行的模型會漂移。一旦漂移,選擇性揭露就會淪為理想化的文案,「只讓官員看一個號碼」也會在不知不覺間變成「整篇備註一起匯出」。

限制:平行模型會外洩

產品團隊往往很早就把關注點拆開:

  • 編輯表單自己的一份欄位清單;
  • 詳情頁自己的一份顯示版面;
  • 共用對話框自己的一份核取清單;
  • 提醒工作自己寫死的一組類別欄位。

每份清單一開始都是對齊的。接著有人在編輯表單加了一個欄位,卻忘了呈現介面。有人加了一個可呈現的欄位,卻從沒經過編輯表單驗證過。有人把到期功能寫死成只認 category === "document",而某個憑證範本用另一個 slug 承載著同樣語意的日期欄位。

漂移會造成過度揭露。 從一份過時清單複製來的共用預設值,可能揭露超過目前這個項目實際擁有的內容——或者反過來,藏起收件人真正需要的那一個欄位,逼使用者又回頭去傳截圖。

漂移會造成失效的功能。 只認得單一類別的提醒功能,會漏掉每一個正確重用了到期日型別的套件。

漂移會製造兩個真相來源。 加密與 CBF 封裝的,是儲存路徑當時編碼的內容。如果呈現介面讀的是另一張對照表,你推理的就不再是那個已封裝的項目,而是一個介面投射出來的幻影。

限制是:介面可以在外觀與政策上不同;它們不能在「這一列上存在哪些語意欄位」這件事上不同。

設計:解析一次,投影四種方式

使用中欄位集合

針對一個項目,保管箱會解析出:

  1. 類別範本的有序欄位配置;
  2. 登錄表中稀疏的逐項目額外欄位;
  3. 每個配置對應的型別定義(能力旗標、編輯器、預設值)。

這一整包,就是使用中欄位集合——與從同一套型別系統組合出各個領域用來做功能開關的是同一個概念。

四個介面

介面工作
編輯用正確的編輯器擷取並驗證值
檢視以閱讀為導向的外觀——標籤、分組、適合列印的版面
呈現/共用較窄的揭露範圍——遮罩、允許清單、限時顯示
功能跨領域行為——到期、健康檢查、特徵組合、清單預覽
flowchart TB
  Active[使用中欄位集合]
  Active --> Edit[編輯]
  Active --> View[檢視外觀]
  Active --> Present[呈現/共用]
  Active --> Feat[功能]

編輯會依照型別定義綁定編輯器。密碼是遮罩的。日期用日期控制項。文件照片使用一個具有二進位形狀的欄位,而不是一個沒有語意歸屬的鬆散檔案。

檢視套用的是顯示設定檔與綁定方式——也就是你在閱讀而非編輯時,這個項目應該呈現的樣子。外觀可以強調核發機關與到期日,卻不需要重新定義這些欄位是什麼。

呈現/共用在同一組欄位上套用更嚴格的政策。配置與型別預設值標示出哪些欄位是硬性封鎖、哪些可以選擇性納入,以及安全呈現時可以顯示什麼,同時不會交出整份內容的永久副本。共用機密不是主密碼——見共用密碼 ≠ 主密碼——而呈現介面也不是「附上整份密文再賭運氣」。

功能訂閱的是這組欄位上的能力旗標與特徵組合。當到期語意存在時,到期流程就會觸發。密碼健康檢查會掃描任何出現密碼語意的地方。清單預覽依優先順序挑一個非機密的提示欄位。這一切都不需要第二份結構描述文件。

政策是一面透鏡,不是一次分岔

呈現可能顯示比編輯更少的欄位。檢視可能在揭露之前隱藏僅限解鎖才顯示的機密。功能可能忽略空值。這些都是套在同一組欄位上的透鏡。當範本新增一個欄位時,四個介面都會從同一條解析路徑學到這個變化——依各自的政策調整——而不是靠四個可能互相打架的提交各自更新。

取捨:呈現範圍更窄,重用範圍更廣

有了單一欄位集合,「顯示得少一點」就成了呈現介面預設的工程路徑:你是從已解析的集合中做減法,而不是維護一個裝滿表單曾經有過的所有欄位的大雜燴。它也讓功能出現在意想不到、卻正確的地方——一個帶有密碼欄位的 API 服務範本,即使不假裝是傳統的憑證類別,也能獲得密碼相關的行為。

代價是紀律。新介面不能自行發明一個從未進入使用中集合的影子欄位。新套件如果想讓提醒與共用遮罩正常運作,就必須放置真正的登錄表型別。

我們拒絕什麼

我們拒絕為呈現介面建立第二套資料模型。 呈現介面在政策下讀取項目本身的欄位;它不會維護一份可能與之分歧的平行「共用酬載」結構描述。

我們拒絕把「整份項目」當成共用的預設內容。 選擇性揭露存在的意義,就是讓「看這一個欄位」不等於「把這一列上的所有機密都帶走」。

我們拒絕只認得三個舊 slug 的功能邏輯。 只要語意欄位存在於這一列上,功能就應該看得見它——套件也不例外。

我們拒絕教會使用者把截圖當成真正的呈現方式。 當各介面共享同一組欄位時,產品流程就能維持得比相機膠卷還要窄。

收束整條主線

本系列論證了一條主線:

  1. 插槽,而非空白頁 — 文件模型
  2. 語意欄位,而非表單元件 — 登錄表
  3. 從同一套型別系統組合出各個領域 — 套件
  4. 可搜尋的中繼資料,封裝後的欄位值 — 儲存邊界
  5. 四個介面,一組欄位 — 產品投影

合在一起,這就是為什麼 NT² 能夠橫跨各個領域,卻不需要一張空白畫布,也不需要一個看得懂你欄位的伺服器。結構不是密文上的裝飾。它是讓本機優先資產真正好用、也讓揭露範圍有限度的那套型別系統。

關於這個模型旁邊的身分與共用邊界,可閱讀選擇性 SSI——不是一個 DID 錢包。關於每個介面背後的密文形狀,可閱讀CBF:結構化欄位離開記憶體的方式

歡迎試用 NT² Vault,或探索 nt2.me

最後更新 2026-11-29

相關故事