Есть много способов реорганизовать этот вид кода, чтобы сделать его более лаконичным. Это действительно стало делом опыта и предпочтения, чтобы выбрать метод, который подходит для каждого случая.
С этой целью я перечислил несколько вариантов, которые, как мне кажется, хорошо мне подходят:
Binding
Связывание, особенно в WPF, дает очень мощный способ простого обновления объектов формы. В вашем Xaml вы применяете текст данных (как правило, для формы / окна) и привязанное свойство для каждого объекта, что затем позволяет вам обновлять свойства в вашем коде c # и автоматически отражать их в объектах формы.
Одним из больших преимуществ этого является устранение всего этого утомительного object.Text = "xyz"
кода.
В данном примере вы можете ввести логическое свойство TextBoxesEnabled
, которое связано со свойством enabled ваших текстовых полей и показывает, является ли a == b.
Доменные объекты
Это следует из подхода связывания - в приведенном выше примере кажется, что все ваши свойства зависят только от двух внешних частей данных («a» и «b»). В этой ситуации вы часто ограничены выполнением чего-то такого же, как и у вас, когда вам нужно установить свойства пользовательского интерфейса в большом количестве процедурного кода.
Однако чаще вы можете представить выразительные доменные объекты, свойства которых сопоставляются непосредственно со свойствами пользовательского интерфейса. Например, возможно, у вас есть объект User
со свойством Name
, а затем окно пользователя с текстовым полем имени.
Теперь ваш доменный объект будет обеспечиваться вызовами в ваш уровень обслуживания и инфраструктуру доступа к данным, а также из-за привязки, автоматически отображаемой в вашем пользовательском интерфейсе.
Рефакторинг кода
Даже там, где вам нужно установить множество свойств напрямую, без возможности использовать более выразительные объекты и привязку, часто могут быть некоторые простые рефакторинги, которые могут помочь.
В приведенном вами примере кода мне выпрыгнули два простых рефакторинга:
a == b
- логическая оценка, поэтому вы можете получить что-то вроде:
bool enableTextBoxes = a == b;
TextBox1.Enabled = enableTextBoxes;
TextBox2.Enabled = enableTextBoxes;
// etc...
Вы устанавливаете текст на одну и ту же вещь в ветвях if
, поэтому возьмите это из if
и просто получите его один раз (хотя я предполагаю, что это только потому, что вы приведем пример кода).
Вы можете циклически перебирать наборы элементов управления, поэтому, если вам нужно задать большое количество значений элемента управления для одной и той же вещи, вы можете просто выполнить итерацию по ним и присвоить каждому из них.