【问题标题】:Design Pattern for Storing New Values for Abitrary Fields为任意字段存储新值的设计模式
【发布时间】:2012-02-10 00:39:34
【问题描述】:

假设我有一堂课,用户:

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...
}

所以问题在于我不知道我正在更改的字段的类型。我想我可以将 newValue 设为 Object 类型,并根据属性枚举的值进行转换...

无论如何,有没有很好的设计模式可以解决这个问题?如果有,在数据层是如何实现的(我用的是关系型数据库)?

(请不要发布“你不可改变的魔法系统是愚蠢的......不要存储已知不正确的数据”的帖子,因为我知道这一点并且完全无能为力。)

谢谢!

【问题讨论】:

  • 我正在使用 Java。我觉得这个问题与语言无关。
  • 啊,我正在考虑一些 C# 方法来实现它,但后来意识到它可能是 Java 呵呵。我想我会问的。
  • C# 很好!它至少可以让我走上正确的逻辑路径,在 Java 中实现类似的目标。谢谢! ;)

标签: design-patterns database-design


【解决方案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 中的工作方式相同,但您必须确认。

【讨论】:

  • 是的!泛型 do 在 Java 中的工作方式与此类似。现在......你知道如何制作一个支持它的数据库吗? (特别是使用(N)Hibernate!):)
  • 这些更新会存储在数据库中吗?不确定最好的方法。您也许可以在 XML 或 SOAP 或其他东西中序列化 UserUpdate&lt;T&gt; 类型的数组。
  • 不幸的是,是的。谢谢你的帮助;我将继续研究数据库方面的事情。
猜你喜欢
  • 1970-01-01
  • 2011-07-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多