[英]4-eyes-principal implementation on a contact & company system
我們正在構建一個相當復雜的系統,我們需要在其中管理聯系人和公司(實體)。 實體由業務用戶管理。 他們有多個關聯。 例如:
聯系
公司
地址
聯絡公司協會
聯系人地址關聯
因此,ID = 42的聯系人與2個公司相關聯。 還有更多的關聯:因此,聯系人可以具有多個電話號碼,郵政地址等等。
實體有3個州:
1. InCreation創建實體,仍然缺少一些必填字段; 不准備使用。
2.待定實體已完全創建,所有必填字段均已填寫; 不准備使用
3.驗證實體已驗證(由用戶!=創建者驗證)並且可以使用
一旦實體已達到驗證狀態,並且想要修改這樣的驗證實體,則必須將修改單獨存儲,並且不允許修改修改后的實體。 因此,曾經驗證過的實體仍然是系統其余部分使用的實體。 然后,業務用戶!=修飾符便可以驗證這些更改:通過比較所有已更改的內容。 如果他接受這些更改,則需要將更改應用於原始經過驗證的實體。 Apply表示需要將值復制到原始數據庫記錄,因為不允許更改ID(它們指向其他實體系統)
如何存儲這些修改?
修改只是具有新狀態= InModification的另一條記錄。 但是然后我還需要將所有關聯加倍,並需要存儲原始實體和關聯之間的關系,因為我以后需要知道發生了什么變化(例如,紐約的郵政地址現在在第5街,而現在在百老匯則更長)創建很多可能不需要的記錄,因為實體關聯樹可能很大,並且必須創建許多記錄以修復名稱中的拼寫錯誤
將修改存儲為XML Blob(我們使用WCF將實體從服務器傳輸到客戶端,因此默認情況下這些實體是可序列化的)。 這與ID無關,以后還要應用更改(刪除和添加的關聯必須格外小心)。 我在這里看到的問題是軟件更新。 一旦我們在以后的更新中更改了實體結構,便存在以下危險:保存在betweeb 2版本之間的舊實體修改不再可讀
想法2更好。 除了需要對未完成的更改進行一些驗證之外,因此無論在何處修改實體,都需要先進行驗證。如果該實體存在一些未完成的更改,則它將最終取決於最終用戶來解決沖突,他可能會選擇覆蓋舊的未完成的更改。最后,它將只是覆蓋未完成的更改,這些以XML的形式存儲。 或者您可能不會覆蓋舊的更改,可以有兩個版本的待處理更改,然后將取決於業務用戶來確定哪個版本更好,因此在這種情況下,您可以使用XML形式的待處理更改:
<pendingChanges entityID="12333">
<propertyName1>
<version1 value="val1"/>
<version2 value="val2"/>
</propertyName1>
<propertyName2>
<version1 value="val1"/>
<version2 value="val2"/>
<version2 value="val3"/>
</propertyName2>
</pendingChanges>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.