DFD指南:資料儲存與流程的關鍵差異

Infographic comparing Process and Data Store elements in Data Flow Diagrams (DFDs): Process shown as active transformation with verb labels and rounded rectangles, Data Store as passive persistence with noun labels and open rectangles, featuring key differences in function, naming conventions, data retention, connectivity rules, and visual symbols in a decorative stamp and washi tape style design

在建模複雜系統時,清晰性是首要目標。資料流程圖(DFD)是一種基礎工具,用於視覺化資訊如何在系統中流動。在此架構中,有兩個符號佔據主導地位:流程 以及 資料儲存。儘管它們經常互動,但這兩者代表了關於轉換與持久性截然不同的概念。理解這項區別對於準確的系統分析與設計至關重要。

本指南探討這些元素的功能角色、視覺呈現與邏輯含義。透過區分動作與儲存,分析人員可以建立清晰傳達系統行為的圖表,避免歧義。

🔄 定義流程

流程代表一項工作單元或轉換。這是資料改變形式、被計算或被過濾的地方。將流程視為一個黑箱。你知道什麼進來、什麼出去,但內部機制是由轉換邏輯本身定義,而非由資訊的儲存方式決定。

🔹 核心特性

  • 轉換:主要功能是修改資料。輸入資料進入,套用規則或邏輯,輸出資料離開。
  • 時間性質:流程僅在觸發時才會活躍。它們在執行之間不會保留資料。
  • 方向性:資料流入並流出流程。在DFD架構中,沒有輸入或輸出的流程在邏輯上是無效的。
  • 動詞命名: 流程通常以動詞或動詞片語標示(例如,計算稅額, 驗證使用者, 產生報表).

🔹 黑箱概念

在高階建模中,流程是一個黑箱。重點在於什麼發生在資料上的事情,而非如何技術上如何發生。例如,名為「處理訂單」的流程會接收訂單細節並建立交易記錄。它不會說明計算是在記憶體中、磁碟上,還是透過遠端API進行。這種抽象讓利害關係人能專注於商業邏輯,而非技術實作。

然而,隨著圖表分解到較低層級,內部邏輯會變得更詳細。即便如此,流程仍是一個主動的轉換引擎。它消耗輸入、執行工作並產生輸出。它不會作為資訊的暫存容器。

🗄️ 定義資料儲存

資料儲存體代表一個資訊存放的儲藏庫。與處理程序不同,資料儲存體不會轉換資料。它只是等待。它會以持久狀態保存資料,直到有處理程序取得資料,或有處理程序將資料存入其中。

🔹 核心特性

  • 持久性: 資料即使在沒有任何處理程序運作時仍會保留在儲存體中。這與記憶體緩衝區或暫時變數的關鍵差異。
  • 被動性: 資料儲存體不會主動啟動動作。它們需要由處理程序來讀取或寫入。
  • 名詞命名: 儲存體通常以名詞命名(例如,客戶資料庫, 訂單檔案, 庫存日誌).
  • 開放式: 資料流可以進入和離開儲存體。然而,儲存體無法直接連接到另一個儲存體。資料必須透過處理程序才能在不同儲存庫之間移動。

🔹 儲存庫概念

想像一個圖書館。書籍就是資料。書架就是資料儲存體。圖書館員就是處理程序。圖書館員並不會創造書籍;他們負責整理書籍。書架本身不會移動書籍;它們只是將書籍固定在原位。當讀者請求一本書時,圖書館員會將其取出(讀取操作)。當一本新書到達時,圖書館員會將其放置在書架上(寫入操作)。

在系統架構中,資料儲存體可能代表資料庫表格、平面檔案、佇列或雲端儲存桶。DFD 符號抽象了技術細節。無論是 SQL 表格還是簡單的文字檔案,其邏輯角色都相同:它是一個資訊存放的位置。

⚡ 互動與資料流

處理程序與資料儲存體之間的關係受到嚴格的資料流規則所規範。DFD 中的箭頭代表資料的移動。這些箭頭決定了資訊傳輸的方向。

🔹 讀寫循環

當處理程序需要資訊時,會從資料儲存體畫出一個箭頭指向處理程序。這表示讀取操作。處理程序會提取資料,用於其轉換邏輯。相反地,當處理程序產生新資訊時,會從處理程序畫出一個箭頭指向資料儲存體。這表示寫入操作。資料現在已被儲存,以供未來使用。

關鍵的是,資料流無法直接連接兩個資料儲存體。資訊無法在未經處理的情況下從一個儲存庫遷移至另一個儲存庫。此規則強調了資料移動總是伴隨著某種層級的邏輯或控制,即使該邏輯僅為簡單的複製操作。

🔹 外部實體

外部實體(來源或接收端)與處理程序互動,而非直接與資料儲存體互動。外部實體可能是一個人類使用者、第三方 API 或另一個系統。它們會將資料傳送給處理程序,或從處理程序接收資料。處理程序隨後決定是否將該資料儲存在儲存庫中,或予以丟棄。

📋 比較表格

為了總結結構上的差異,請考慮以下屬性的分解。

屬性 處理程序 資料儲存體
功能 轉換 / 行動 儲存 / 記憶體
語法 動詞(例如:更新) 名詞(例如:使用者表格)
活動 主動(觸發時執行) 被動(等待存取時才運作)
資料保留 暫時(執行期間) 持久(長期)
連接性 連接至實體、儲存空間及其他流程 僅連接至流程
符號形狀 圓角矩形或圓形 開放矩形或平行線

🧩 命名慣例

命名的一致性可避免在審查與實作階段產生混淆。當同一個詞被用於儲存與動作時,常會產生歧義。

🔹 流程命名

名稱應描述對資料所執行的動作。避免使用「做它」或「處理」等通用名稱。應使用具體的描述詞。例如,「驗證登入憑證」比「檢查登入」更佳。這種清晰性可幫助開發人員立即理解預期的輸入與輸出需求。

🔹 資料儲存命名

名稱應反映內部所儲存的內容。使用複數名詞或明確的識別符。例如「Orders」暗示一組訂單記錄的集合;「Order」可能暗示單一交易實例。雖然語境很重要,但複數名詞通常表示包含多筆記錄的儲存庫。

命名資料儲存時,應考慮範圍。稱為「Database」的儲存空間過於模糊。應使用「客戶資料庫」或「交易記錄」等更具體的名稱,以提供必要的語境。這種細緻程度有助於後續將圖示對應至實際的儲存結構。

🧪 分解與層級

DFD 是層級式的。高階圖示(上下文圖)將系統視為單一流程。隨著你將其分解為較低層級,流程與儲存之間的區別變得更加重要。

🔹 第 0 層與第 1 層

在上下文圖中,整個系統被視為一個流程。在第 0 層,此流程被分解為主要的子流程。在此引入資料儲存,以顯示主要資料元件的位置。在第 1 層及更下層,流程會進一步細化。

在分解過程中,確保資料儲存不會無謂地重複。若某個儲存在第 0 層存在,通常應延續至第 1 層,除非特定子流程需要暫時快取(這將是另一個不同的儲存)。各層之間的一致性可確保可追蹤性。

🔹 平衡

分解過程中的關鍵規則是「平衡」。父流程的輸入與輸出必須與下層圖示中子流程的輸入與輸出相符。資料儲存也必須對齊。若某個儲存在父圖中出現,子圖必須正確反映該資料流。若流程被拆分,資料流向該儲存的流動必須在拆分後仍保持完整。

⚠️ 應避免的邏輯錯誤

某些結構性錯誤可能會使圖表無效。及早識別這些錯誤,可在開發階段節省時間。

  • 幽靈資料流: 一個流程若沒有資料流入卻有資料流出,這是不可能的。流程無法從無中生有地產生輸出。每一項輸出都必須來自輸入資料或儲存的資料。
  • 直接儲存連接: 如前所述,儲存區不能直接連接到另一個儲存區。資料必須經過流程傳遞。這確保所有資料移動都是有意識且經過處理的。
  • 孤立的流程: 一個沒有任何資料流入或流出的流程是孤立的。它不與系統互動,在資料流程圖中也沒有任何作用。
  • 混淆實體與儲存區: 外部實體位於系統邊界之外。資料儲存區位於系統內部。不要將外部實體的符號放置在系統邊界內,彷彿它是一個資料庫。

🛠️ 實作上的影響

流程與儲存區之間的區別會影響系統的建構方式。流程對應到函數、方法或微服務。資料儲存區對應到資料表、檔案或物件儲存。

🔹 資料庫設計

在設計資料庫時,資料流程圖中的資料儲存區會成為資料結構的藍圖。資料流箭頭中的屬性定義了欄位。儲存區之間的關係(由流程中介)定義了外鍵或交易連結。

🔹 工作流程自動化

對於工作流程引擎而言,流程代表管道中的各個步驟。資料儲存區代表工作流程的狀態。流程可能更新儲存區中的狀態,以標示某項任務已完成。理解儲存區的被動性,可確保工作流程引擎在繼續前等待正確的狀態。

🔍 視覺表示標準

不同的方法論使用稍有不同的符號,但邏輯保持一致。

  • DeMarco 與 Yourdon: 流程使用圓角矩形,資料儲存區使用開口矩形。
  • Gane 與 Sarson: 流程使用圓角矩形,資料儲存區使用平行線。

無論選擇哪種符號表示法,語意意義都相同。流程是動作者;儲存區是持有者。在專案文件中保持一致性,比遵守特定標準更重要,只要團隊理解所選的規範即可。

🎯 角色總結

建立穩健的系統模型,需要在角色分配上保持紀律。流程是行動者,執行工作。資料儲存區是舞台,用來存放道具。沒有行動者,舞台就是空的;沒有舞台,行動者無處安放其成果。

透過維持轉換與儲存之間的明確區分,分析師能創造出不僅視覺上吸引人,而且邏輯上正確的圖表。這些圖表成為商業利益相關者與技術團隊之間的契約。它們定義了責任範圍與價值流動。

審查資料流程圖時,針對每個符號問兩個問題:「這是在執行工作嗎?」(流程)或「這是在儲存資訊嗎?」(儲存區)。如果答案不清晰,應重新調整標籤或連接方式。清晰度是系統建模的最終目標。

遵循這些原則,可確保所產生的架構具備可維護性、可擴展性與可理解性。區別看似簡單,但對系統完整性影響深遠。