Проблема, с которой я в настоящее время сталкиваюсь, заключается в отображении нескольких полей графического интерфейса в свойства объекта (т. Е. Уровень представления для отображения бизнес-логики). Чтобы быть более конкретным, это в VB.Net 2.0 WinForms.GUI для сопоставления бизнес-объектов VB.Net
Характер решения требует, чтобы у нас было 4 столбца, которые демонстрируют один и тот же тип поведения в нашем графическом интерфейсе - каждый столбец, состоящий из 11 текстовых полей (мы просто используем этот небольшой размер выборки, поскольку проблема выходит за пределы 11 текстовых полей).
То, что я сейчас делаю это установка метки каждого текстового поля во всех четырех столбцах значения следующим образом:
Textbox1.tag = "name"
Textbox2.tag = "type"
Textbox3.tag = "speed"
Когда событие поднятый в текстовое поле (например, нажатие клавиши), я смотрю на родительский контейнер, чей тег я также задал как строку, сопоставляющую конкретный объект. Я использую это в сочетании с тегом textbox, чтобы определить, какое свойство объекта нужно установить. В целом, это выглядит примерно так:
dim objectToMapTo //the generic parent object which all my custom myObjects inherit from
select case sender.parent.tag //the parent object that the property needs to map to
case "column1"
objectToMapTo = myObject1
case "column2"
objectToMapTo = myObject2
case "column3"
objectToMapTo = myObject3
case "column4"
objectToMapTo = myObject4
end select
select case sender.tag //the actual textbox's tag value which maps to the property
case "name"
objectToMapTo.Name = sender.text //sender.text is conceptual for
//the data that needs to be set -- i.e. this could be a calculated
//number based on the text, or simply a string, etc
case "type"
objectToMapTo.Type = sender.text
case "speed"
objectToMapTo.Speed = sender.text
...
end select
Как вы можете видеть, это может стать очень плохой, довольно быстро. В настоящее время мы устанавливаем 43 некоторых нечетных свойства, к которым можно сопоставить - таким образом, оператор select чрезвычайно длинный, многие из которых встроены в несколько методов, чтобы попытаться сделать DRY (я опустил код по существу концептуально реализация).
Вопрос: как я могу реорганизовать это? Я попытался использовать словари/хэши в определенной степени, но он либо стал слишком сложным, либо просто не реализовал смысл реализации, так как он еще больше запутал проблему.
Спасибо за помощь.
отражение будет хорошо работать на самом деле. Единственное, что каждое значение задано немного сложнее. Таким образом, мы могли бы иметь это как objectToMap.Customer.Name = sender.text, а затем objectToMap.Asset.Type = sender.text - поэтому в основном нужно получить/установить вложенные свойства, которые придают ему дополнительный уровень сложности – MunkiPhD
Я ответил вопрос, но если вы измените правила, я должен изменить ответ. Проблема с вложенными свойствами также легко решена с отражением BTW. Но это был не вопрос. – chrissie1