我有一個抽象基類和兩個派生類。基類包含6個屬性,所有這些屬性都可以在表單上維護。處理同一表單中多個對象類型的好方法是什麼?
這兩個派生類都有一個額外的屬性。這兩個屬性也可以保持在相同的形式。
在我的表單中我有現在這樣的代碼:
btnSomething.visible = (myObject is DerivedA);
pnlPanel.visible = !(myObject is DerivedA);
if(myObject is DerivedA)
myBindingSource.DataSource = myObject as DerivedA
mySecondBindingSource = myObject;
我不是很樂意使用這種方法,它的氣味。所以我的問題是,做出這個更多OO的方法是什麼?因爲它可能是,在未來DerivedC進來......
我認爲這種做法打破了OCP原則(也可能是其他的原則)
我在這個方向思考,但在你的情況,我可以閱讀'foo.Prop1'爲'foo.ShowButtonSomething'?所以基本上,每個依賴於Derived類的GUI控件都創建了一個布爾屬性? – Martijn
是的,但在界面上,你應該把邏輯負載,而不是UI。所以'ShowButtonSomething' =>'ContainsFoo'。然後在你的邏輯更深處,你檢查如果這個類包含foo,那麼你想顯示一個按鈕。這種方法會將邏輯封裝在類中,並將表示與模型分離(這總是一個好主意)。另一件事是你的GUI控件應該取決於抽象接口或抽象類,如果你願意的話。 – oleksii
我想我明白了,所以在'ICommonFeatures'中我可以有一個屬性,如'bool ContainsCompanyAddress',在我的表單中我設置了'txtCompanyAddress.visible = foo.ContainsCompanyAddress'? – Martijn