我有一个更复杂的结构,其中一些“子”类被添加到“父”类作为子视图。因此,我有一个名为currentSelectedDate
的变量,它应该可以在所有连接的类中访问。我目前的结构如下所示:
A类(最顶层的“父母”):
private DateTime currentSelectedDate;
public DateTime CurrentSelectedDate {
get
{
if (this.dayHeader != null)
{
return this.dayHeader.CurrentSelectedDate;
}
else
{
return this.currentSelectedDate;
}
}
set
{
this.currentSelectedDate = value;
if (this.dayHeader != null)
{
this.dayHeader.CurrentSelectedDate = value;
}
}
}
B级(A / dayHeader的“孩子”):
private DateTime currentSelectedDate;
public DateTime CurrentSelectedDate {
get
{
if (this.weekdayScroller != null)
{
return this.weekdayScroller.CurrentSelectedDate;
}
else
{
return this.currentSelectedDate;
}
}
set
{
this.currentSelectedDate = value;
if (this.weekdayScroller != null)
{
this.weekdayScroller.CurrentSelectedDate = value;
}
}
}
C级(B / weekdayScroller的“子”):
public DateTime CurrentSelectedDate { get; set; }
此处仅显示从父项到子项的方向,其中属性用于传播数据。在向后的方向,我使用事件。这种方法的缺点是我必须在每个类中多次存储值。另外,如果我在一个类中,我必须手动设置this.currentSelectedDate
的值,还要设置其他类(例如dayHeader.CurrentSelectedDate
)(setter / getter只能由外部调用使用)
对于A类,隐藏了C类(weekdayScroller)。
C类(weekdayScroller)也被其他类使用,所以我必须直接在其中维护属性currentSelectedDate
。
还要注意什么时候初始化。例如。在创建A类时,currentSelectedDate
已设置,但B类尚未存在。因此null
检查。
我现在的问题是,如果这是处理所有阶级之间的国家传播的好方法,或者是否有更好的方法。
答案 0 :(得分:1)
有更好的方法吗?不是我知道的。我理解这种设计的缺点。
如果要设置的变量只有一个值(所以父子关系是1:1),为什么不把它放在你引用的共享类中。它实际上是相同的,但可能更容易概述发生在哪里以及它们的责任。