私は現在、複数のGUIフィールドをオブジェクトプロパティ(すなわち、プレゼンテーションレイヤーからビジネスロジックレイヤーマッピングへ)にマッピングしています。具体的には、これはVB.Net 2.0 WinFormsにあります。GUIからビジネスオブジェクトへのマッピングVB.Net
ソリューションの性質上、我々の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を試して試してみるために複数のメソッドに組み込まれています(私はコードを基本的に実装)。
質問:私はどのようにこれをリファクタリングすることができますか?私は辞書/ハッシュをある程度使ってみましたが、それはあまりにも複雑になってしまったのですが、問題がさらに複雑になってきたので実装が意味をなさないだけでした。
ありがとうございます。
反射が実際にうまくいくでしょう。各値が少し複雑に設定されていることだけです。ですから、objectToMap.Customer.Name = sender.textとobjectToMap.Asset.Type = sender.textのように入れ子になったプロパティを取得/設定する必要があります。複雑なレイヤを追加しました – MunkiPhD
私はあなたがルールを変更したら、私は答えを変えなければなりません。ネストされたプロパティの問題も、リフレクションBTWで簡単に解決できます。しかしそれは問題ではありませんでした。 – chrissie1