У меня есть абстрактный базовый класс и два производных класса. Базовый класс содержит 6 свойств, которые все могут поддерживаться на форме.Что такое хороший способ обработки нескольких типов объектов в одной и той же форме?
В двух производных классах есть 1 дополнительное свойство. Эти два свойства также могут поддерживаться в одной и той же форме.
В моей форме у меня сейчас такой код:
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, вы создаете логическое свойство? – Martijn
Да, но в интерфейсе вы должны скорее поставить логическую нагрузку, а не пользовательский интерфейс. Итак 'ShowButtonSomething' =>' ContainsFoo'. Затем глубже в вашей логике вы убедитесь, что если класс содержит foo, вы хотели бы отобразить кнопку. Такой подход сохранит логику, инкапсулированную в классе, и презентация будет отделена от модели (что всегда является хорошей идеей). Другое дело, что ваши GUI-элементы управления будут зависеть от абстракции - интерфейса или абстрактного класса, если вы предпочитаете. – oleksii
Я думаю, что получаю его, поэтому в «ICommonFeatures» у меня может быть свойство «bool ContainsCompanyAddress», и в моей форме я устанавливаю 'txtCompanyAddress.visible = foo.ContainsCompanyAddress'? – Martijn