2012-03-21 49 views
0

我需要表示一个对象的属性与另一个datasourace的不同。我有两个数据源,当我从其中一个数据源拉出时,我需要一种方法来确定该数据源中的对象的任何属性是否与其他数据源不同。表示一个属性不同于另一个对象

DSA Object1.Value = 3

DSB Object1.Value = 4

显然,确定它们是不同的是容易的。然而,我想要的是能够说DSB.Object1.Value是“不同”,而不需要将对象从DSA传​​递到视图。

我最初的做法是有一个PropertyWrapper类

public class PropertyWrapper<T> 
{ 
    T value; 
    bool different; 
} 

是否有更好的方式,通过属性或扩展来表示呢?

编辑:从“更改”更改为“不同”表示。我不需要实时“更改”,而是需要表示该属性与另一个数据源中同一对象的相同属性不同。

+1

更好的方法是什么?性能?可读性?发展的难易程度? – Oded 2012-03-21 19:58:44

+0

这是一个非常好的问题。可读性。通过这种方法,我将拥有一个具有不同类型的12个PropertyWrapper属性的类。 – Quickhorn 2012-03-21 19:59:54

回答

1

考虑到您将其从数据源中提取出来,第一个解决方案是使用boolean内的一些字段,如IsChanged

换句话说:

的“经营者”谁在操作的对象应该改变它里面的状态/场的护理,以通知外界的东西在那个对象改变。

目前对此没有简单的解决方案,但你可以定义一些通用接口,像INotifyPropertyChanged,或发明你自己,谁方法SignalChanged上调用每个属性set功能。

只是一个想法,可能有很多其他解决方案。

+0

需要为对象的每个属性表示IsChanged。 – Quickhorn 2012-03-21 20:01:58

+0

我会改变它来存储初始值。这样,如果它再次更改回原来的IsChanged属性可能会返回false。 – Matt 2012-03-21 20:03:44

+0

@Quickhorn:否'IsChanged'是一个对象的属性。或者如果你想要更精确一点,你可以有一些List'Changes ',它包含从最后一个“清除”状态变异的所有属性值。 – Tigran 2012-03-21 20:04:52

0

我会建议每个对象实现INotifyPropertyChanged(像NotifyPropertyWeaver这样的事情使这很容易),然后某种中央对象可以挂钩两个实例,以确定它们是否在第一次从数据源中提取值后进行更改。

+0

我已编辑的问题更清楚。我不需要实时更改检查,但是表示对象B具有与对象A不同的值(以及哪些值不同),而不需要对象A. – Quickhorn 2012-03-21 20:02:56

0

我建议使用DateTime timestamp属性;随时随地更新它以进行更改。

这还有一个额外的好处,即让您知道何时进行了更改。 (当多个数据源访问数据,版本化数据等时这很有用)

+0

这是比我需要更多的信息。我需要的只是知道从一个数据源属性拉出的对象是否与另一个数据源属性不同,并存储该信息。 – Quickhorn 2012-03-21 20:06:40

相关问题