我目前遇到的问题是将多个 GUI 字段映射到对象属性(即表示层到业务逻辑层的映射)。更具体地说,这是在 VB.Net 2.0 WinForms 中。
解决方案的性质要求我们有 4 列在我们的 GUI 上表现出相同类型的行为 - 每列由 11 个文本框组成(我们将只使用这个小样本量,因为问题超出了 11 个文本框)。
我目前正在做的是将所有四列中每个文本框的标签设置为如下值:
Textbox1.tag = "name"
Textbox2.tag = "type"
Textbox3.tag = "speed"
当文本框(例如按键)引发事件时,我查看父容器,我还将其标记设置为映射特定对象的字符串。我将它与文本框的标签结合使用来确定我需要设置的对象属性。总的来说,它看起来像这样:
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(我已将代码淡化为本质上的概念执行)。
问题是:我该如何重构它?我曾尝试在一定程度上使用字典/哈希,但它要么变得过于复杂,要么只是简单地没有实现意义,因为它使问题更加复杂。
谢谢您的帮助。