2009-09-14 56 views
0

我有空整數列表,它看起來像一個1對多的關係你會如何設計一個「狀態/管理」,將做到這一點

id1 can have an id2 and id3 
id2 can have id4 

如果ID1變化,ID2和ID3的價值必須設置爲空,它意味着id4必須設置爲空

在該示例中,我只使用4個變量,以便於管理。

現在,我得到至少15個變量來管理。

我現在想做的方式是在「set」屬性中檢查值是否發生變化,如果是這種情況,請將child值設置爲null。如果關係發生變化,這將成爲一場噩夢,併成爲維護的噩夢。

有沒有比我剛剛說的更簡單/更好的方法?

+1

你的意思是什麼?「但如果關係發生變化並且是維護的噩夢,那麼這將成爲一場噩夢」關係將如何變化,維護問題是什麼?你試圖解決什麼是「業務」問題?這個描述非常抽象。 – olle 2009-09-14 16:08:28

回答

1

您可能會考慮使用INotifyPropertyChanged併爲值更改時添加處理程序。這樣,你可以把你所有的邏輯放在一個地方。

0

這就是我想你現在有:

public class Ids 
{ 
    public int? Id1 
    { 
     get { return _id1; } 
     set 
     { 
      if (_id1 != value) 
      { 
       _id1 = value; 
       Id2 = null; 
       Id3 = null; 
      } 
     } 
    } 

    public int? Id2 
    { 
     get { return _id2; } 
     set 
     { 
      if (_id2 != value) 
      { 
       _id2 = value; 
       Id4 = null; 
      } 
     } 
    } 

    public int? Id3 { get; set; } 
    public int? Id4 { get; set; } 

    private int? _id1; 
    private int? _id2; 
} 

而這裏的一個替代:

public class Id 
{ 
    public Id(int? value) 
    { 
     _value = value; 
    } 

    public void AddChild(Id child) 
    { 
     _children.Add(child); 
    } 

    public IEnumerable<Id> Children 
    { 
     get { return _children; } 
    } 

    public int? Value 
    { 
     get { return _value; } 
     set 
     { 
      if (_value != value) 
      { 
       _value = value; 

       foreach (Id id in Children) 
       { 
        id.Value = null; 
       } 
      } 
     } 
    } 

    public override string ToString() 
    { 
     return Value.ToString(); 
    } 

    private readonly List<Id> _children = new List<Id>(); 
    private int? _value; 
} 

使用方法如下:

var id1 = new Id(1); 
var id2 = new Id(2); 
var id3 = new Id(3); 
var id4 = new Id(4); 

id1.AddChild(id2); 
id1.AddChild(id3); 

id2.AddChild(id4); 

注意,您可以添加這些到通用列表<Id>。

我對此只做了基本的測試,並且有很多的替代品(以及提供更簡單初始化的語法糖的方法)。也許其他人會建議更好的設計;希望這可以準確描述你的問題。

編輯:這是試圖回答問題;然而,這將有助於對您正在嘗試解決的問題有更多的背景。例如,可空的ID代表什麼,爲什麼一個ID是另一個的孩子?是否有數據庫參與?

相關問題