我目前面临的问题是将多个GUI字段映射到对象属性(即表示层到业务逻辑层的映射)。更具体地说,这是在vb.net 2.0 winforms中实现的。
解决方案的性质要求我们有4列,它们在GUI上显示相同的行为类型——每列包含11个文本框(我们只使用这个小的示例大小,因为问题扩展到11个文本框之外)。
我目前正在做的是将所有四列中每个文本框的标记设置为这样的值:
Textbox1.tag = "name"
Textbox2.tag = "type"
Textbox3.tag = "speed"
当一个事件被文本框(如keypress)引发时,我会查看父容器,它的标记也被设置为映射特定对象的字符串。我将它与文本框的标记结合使用,以确定需要设置的对象属性。总的来说,它看起来是这样的:
dim objectToMapTo
select case sender.parent.tag
case "column1"
objectToMapTo = myObject1
case "column2"
objectToMapTo = myObject2
case "column3"
objectToMapTo = myObject3
case "column4"
objectToMapTo = myObject4
end select
select case sender.tag
case "name"
objectToMapTo.Name = sender.text
case "type"
objectToMapTo.Type = sender.text
case "speed"
objectToMapTo.Speed = sender.text
...
end select
正如你所看到的,这会很快变得非常糟糕。目前,我们设置了43个可以映射到的奇怪属性——因此select语句非常长——其中许多属性嵌入到多种方法中以尝试干燥(我已经将代码简化为基本的概念实现)。
问题是:如何重构这个?我曾经尝试过在某种程度上使用字典/哈希表,但它要么变得过于复杂,要么只是简单的实现,因为它会使问题更加复杂化。
谢谢你的帮助。