自 DODS 5.1 Final 版起,緩存層不再直接快取 DO (DataObject) 實例,改為快取 DataStruct 物件。DO 僅持有對 DataStruct 的引用,實現資料與物件身份的分離。
每個 DO 實例持有兩個 DataStruct 引用:
isDirty 屬性即為 true。即使修改後值與原值相同,isDirty 仍保持 true,直到事務提交。data 移至 originalData,data 設為 null,isDirty 變為 false。data,繼續使用 originalData,isDirty 歸 false。data DataStruct,originalData 為 null。originalData 保持空值,提交後寫入資料庫並同步至 originalData。oid、version 從 DO 移至 DataStruct。isEmpty、databaseName。getOID()、setDatabase(String) 等。同參數定義機制,分為 DatabaseManager 全域預設、Database 級、Table 級 三層疊加覆蓋。
isDirty 語義清晰,避免誤判。