2017-09-05 112 views
1

我們有一個約50〜60個屬性的類,這些屬性依賴於同一類的屬性+某些其他類的屬性。目前正在改變一個屬性,我們正在提高其他20個屬性的屬性更改,這會使代碼變得混亂和容易出錯。處理這種情況的最佳方式是什麼?任何建議的設計模式來解決這個問題?大量屬性取決於其他屬性

public class ClassA 
{ 
    public ClassB classB; 

    public int Prop1 
    { 
     get { return CalculateValueForProp1(); } 
    } 

    private int prop2; 
    public int Prop2 
    { 
     get { return prop2; } 
     set 
     { 
      prop2 = value; 
      OnPropertyChange(nameof(Prop2)); 
      OnPropertyChange(nameof(Prop1)); 
     } 
    } 


    private int prop3; 
    public int Prop3 
    { 
     get { return prop3; } 
     set 
     { 
      prop3 = value; 
      OnPropertyChange(nameof(Prop3)); 
      OnPropertyChange(nameof(Prop1)); 
     } 
    } 

    public int CalculateValueForProp1() 
    { 
     return (this.prop2 * 10 + this.Prop1 * 20 + classB.AnotherProperty*10); 
    } 
} 
+7

打破它,許多較小的班用更少的責任在任何類 –

+0

50〜60個屬性僅僅是在一類太多的代碼。這是基本原則,像你不會像這樣膨脹一類的擔心分離。所以解決方案與屬性無關,並且會基礎。 – Christopher

+2

您可以使用''「'屬性名稱['INotifyPropertyChanged.PropertyChanged'](https://msdn.microsoft.com/en-us/library/system.componentmodel.inotifypropertychanged.propertychanged.aspx)事件',這將會使用* one *事件使所有*屬性失效。最好的做法是實際執行[代碼審查](https://codereview.stackexchange.com/)。 – Sinatr

回答

0

嘗試將屬性的依賴關係映射到對象結構。因此你必須找到屬性之間的依賴關係。

如果您設法讓基類定義「基本」屬性,則可以派生出承載依賴(例如計算)屬性的類。因此,如果基本屬性發生更改,則派生類也應該使用此事件,更新其屬性並激發其自己的事件。

未經檢驗的,但我希望你明白了吧:

public class ClassA 
{ 
    private int prop2; 
    public int Prop2 
    { 
     get { return prop2; } 
     set 
     { 
      prop2 = value; 
      OnPropertyChange(nameof(Prop2)); 
     } 
    } 

    private int prop3; 
    public int Prop3 
    { 
     get { return prop3; } 
     set 
     { 
      prop3 = value; 
      OnPropertyChange(nameof(Prop3)); 
     } 
    } 
} 

public ClassB classB 
{ 
    public ClassB(ClassA classAinstance) 
    { 
     classAinstance.PropertyChanged += (s,e) => OnPropertyChange(nameof(Prop1)); 
    } 

    public int Prop1 
    { 
     get { return (this.prop2 * 10 + this.Prop1 * 20 + classB.AnotherProperty*10); } 
    } 
} 
+0

我已經添加了示例代碼,可能會有所幫助。 – user8562599

相關問題