2

我当前的项目具有随时间变化的业务对象。对象可以有未来的变化以及过去的变化。我的任务之一是为这些对象创建查看器和编辑器,让用户在过去或将来的任何时候查看其状态。更改相当简单:一个或多个属性值已更改/将在某个日期更改。

我想给用户一个简单的方法来查看这个。至少我需要允许用户在对象的历史中前滚和后退。我还想显示每个属性的上一个/下一个值(如果有的话),如果我能做到这一点而不会太混乱或分散注意力的话。最后,如果有一些可视化的方式来显示对象历史的复杂性,例如“时间线”或其他东西,那将是很酷的。这是 Windows 窗体或 WPF 上的 C# 3.5。所有的想法都受到赞赏。谢谢。

还有一件事:是否有任何模式或最佳实践来编码具有时间维度的对象?

再次感谢。

4

3 回答 3

2

一些可能会或可能不会有帮助的想法,因为我认为我有点将我自己的项目投射到你的问题上......

如果数据是数字的,请考虑使用图表组件进行图形表示。用户喜欢图表。

我经常处理可以随着时间而修改的时间数据。因此,假设您有一箱啤酒,并且您计划在一周内消费它。当您度过这一周并衡量您的实际消费量时,您可能需要修改本周剩余时间的计划: alt text http://www.sulix.com/beergraph.png

因此,随着时间的推移,早期的假设变得越来越轻薄。当然,根据您数据的性质,这可能不适用。

如果您还没有,请查看 Tufte 的可视化书籍。它们对于激发思想很有用。特别好看的是量化信息的可视化展示

此外,如果时间维度很强,请使用 UTC 来避免与夏令时相关的问题(假设您处于夏令时生效的位置)。在 UI 中转换为“本地时间”比尝试存储它并考虑 DST 更容易。

至于编码时间序列数据的最佳实践,我认为这在很大程度上取决于它们的性质。如果它们是更典型的“业务”实体(如人),那么我会将版本化数据存储在数据库中,并在您的 DAL 中提供一种使用“截至日期时间”参数获取对象的方法,因此您可以看看它在某个时间的样子。另一方面,如果它们类似于街道上的每小时交通计数,那么拥有一个包含“每日交通计数”集合的“街道”对象可能更有意义。

于 2009-07-17T04:45:28.403 回答
0

一般来说,您所说的是拥有一个“元对象”;也就是说,某个对象会跟踪您的业务对象,并提供一种一致的方式来查询状态的过去和当前值。一般来说,这涉及到对“业务对象”进行强有力的数据描述,从而真正将它们转化为业务数据。实际上,您所说的只是将您认为是“业务对象”的内容迁移到事物的“业务数据”端。这当然是可能的;我怀疑这种观点的改变可能会帮助你完成这个过程。

于 2009-07-16T17:35:20.890 回答
0

我认为你试图完成的最干净的例子之一可以在 stackoverflow 上找到。查看您的答案编辑的历史记录。

于 2009-07-16T17:36:45.583 回答