私が現在抱えている問題は、複数のGUIフィールドをオブジェクトプロパティにマッピングすることです(つまり、プレゼンテーション層からビジネスロジック層へのマッピング)。具体的には、これはVB.Net2.0WinFormsにあります。
ソリューションの性質上、GUIで同じタイプの動作を示す4つの列が必要です。各列は11のテキストボックスで構成されます(問題は11のテキストボックスを超えるため、この小さなサンプルサイズを使用します)。
私が現在行っているのは、4つの列すべての各テキストボックスのタグを次のような値に設定することです。
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
ご覧のとおり、これは非常に早く悪化する可能性があります。現在、マップできるいくつかの奇妙なプロパティを設定しています-したがって、selectステートメントは非常に長いです-それらの多くは、DRYを試行するために複数のメソッドに埋め込まれています(私はコードを本質的に概念的なものに骨抜きにしました実装)。
質問は:どうすればこれをリファクタリングできますか?辞書/ハッシュをある程度使用しようとしましたが、複雑になりすぎたか、問題がさらに複雑になったため、実装が意味をなさなかっただけです。
助けてくれてありがとう。