2012-02-09 53 views
0

存儲新的價值觀說我有一個類,用戶:設計模式爲Abitrary場

public class User { 
    private String name; 
    private Integer age; 
    private Double cash; 

    // Getters and setters... 
} 

一些魔法系吐出來的數據對所有用戶和我的系統撿起來。有些員工需要報告這些數據,但其中的一些已知是不正確的。由於源系統很神奇,沒有人可以混淆其中的用戶數據,所以他們需要使用我的系統來更新這些數據,以便在報告中正確。因此,我想創建一個如下所示的類:

public class UserUpdate { 
    private UserPropertyEnum property; 
    private Something newValue; 
    private Date dateAdded; 

    // Getters and setters... 
} 

所以問題在於我不知道我正在更改的字段的類型。我想我可以使Object類型爲newValue,並根據屬性枚舉的值進行強制轉換...

無論如何,有沒有一種很好的設計模式可以解決這個問題?如果有,它是如何在數據層中實現的(我正在使用關係數據庫)? (請不要存儲「你是不可改變的魔法系統是愚蠢的...不要存儲已知不正確的數據」帖子,因爲我意識到這一點,並且完全無能爲力。)

謝謝!

+0

這是Java嗎? C#? – 2012-02-09 16:18:49

+0

我正在使用Java。我覺得這個問題是語言不可知的。 – Brendan 2012-02-09 16:23:03

+1

啊,我正在考慮一些C#方法來實現,但後來意識到它可能是Java heh。我想問問。 – 2012-02-09 16:25:37

回答

1

在C#中,我會使用泛型。你可以這樣做:

public class UserUpdate<T> { 
    private UserPropertyEnum property; 
    private T newValue; 
    private Date dateAdded; 

    // Getters and setters... 
} 

,然後使用創建更新,比方說,對於工資待遇:

UserUpdate<Int32> salaryUpdate = new UserUpdate<Int32>(); 
salaryUpdate.newValue = 50000; //This will be an int, no need to cast 

我假設你的更新被硬編碼到某種機制,即「補丁」你的魔法數據,所以每個更新的類型都是已知的。我相信泛型在Java中的工作方式是相同的,但您必須確認。

+0

是的!泛型***可以像Java那樣工作。現在......你知道如何創建一個支持它的數據庫嗎? (尤其是使用(N)Hibernate!):) – Brendan 2012-02-09 16:57:13

+0

這些更新將存儲在數據庫中?不確定最好的方式。你也許可以用XML或SOAP或其他方式序列化一個'UserUpdate '類型的數組。 – 2012-02-09 17:13:58

+0

不幸的是,他們確實如此。謝謝你的幫助;我將繼續關注事物的數據庫方面。 – Brendan 2012-02-09 17:17:12