2013-01-12 106 views
0

我正在開發一個應用程序,員工有一個要執行的任務列表。對於每項任務他們正在使用一些項目。例如:一名技工正在研究一輛汽車,並且必須更換一輛新的保險槓,以便機械工人前往倉庫並採購一件新產品。該特定項目具有單位價格。所以當這個人拿起他的固定車時,他會爲保險槓支付特定的價格。但假設價格在幾周後發生了變化。所以我改變了該物品的單價。但在這項任務的歷史中,它仍然是舊的價格。保留對象的歷史記錄(WPF,NHibernate)

我在想什麼方法可以最好地爲此保留歷史記錄。我正在考慮在更改價格之前複製該特定商品,然後使用舊價格的商品更新任務。之後,我會用新的價格進行更新。

還有其他方法可以實現嗎?我使用功能NHibernate把我的數據庫照顧

比方說,這些都是我的課(有點simplyfied和足夠的例子)

public class Task 
{ 
    public virtual int Id; 
    public virtual string Description; 
    public virtual IList<Item> Items; 
} 

public class Item 
{ 
    public virtual int Id; 
    public virtual string ItemName; 
    public virtual decimal UnitPrice; 
} 

任何幫助,歡迎:)

回答

1

有這兩個基本策略:

  1. 使用歷史記錄,如在您的價格表上的scd-2實現。
  2. Item中的所有字段複製到單獨的表格/類(例如ItemInTask)中,該表格捕獲創建任務時使用的確切單位數據。
+0

在我的情況下,我認爲將所有字段複製到具有相同字段的另一個對象是正確的事情,並且最容易實現。 – koala

1

如果開發票(這似乎是這裏的用例),「總是」在創建時將當前價格複製到發票行。

更新價格只能在實際價格表上完成。在跟蹤價格&的歷史記錄方面爲您節省很多麻煩。

在實際價格表上保留一個歷史記錄仍然是一個想法(例如審計),但它不應該用於創建發票和詢問/查詢歷史記錄:[該項目的實際價格是多少特定日期]

相關問題