문제

내가 현재 가지고있는 문제는 여러 GUI 필드를 객체 속성에 매핑하는 것입니다 (즉, 프리젠 테이션 계층에 비즈니스 로직 계층 매핑). 보다 구체적으로, 이것은 VB.NET 2.0 WinForms에 있습니다.

솔루션의 특성을 위해서는 GUI에 동일한 유형의 동작을 나타내는 4 개의 열이 있어야합니다. 각 열은 11 개의 텍스트 상자로 구성됩니다 (문제가 11 개의 텍스트 상자를 넘어서서이 작은 샘플 크기를 사용합니다).

내가 현재하고있는 일은 각 열에서 각 텍스트 상자의 태그를 다음과 같은 값으로 설정하는 것입니다.

Textbox1.tag = "name"
Textbox2.tag = "type"
Textbox3.tag = "speed"

TextBox (예 : Keypress)에 의해 이벤트가 제기되면 부모 컨테이너를보고 있는데, 그의 태그는 특정 객체를 매핑하는 문자열로 설정했습니다. 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 개를 매핑 할 수있는 몇 가지 홀수 속성을 설정합니다. 따라서 일부 명령문은 매우 길다. 그 중 다수는 건조를 시도하고 시도하기 위해 여러 가지 방법에 포함되어있다 (나는 본질적으로 개념적으로 코드를 물로 물리 쳤다. 구현).

질문은 : 어떻게 이것을 리팩터링 할 수 있습니까? 나는 사전/해시를 어느 정도 사용하려고 시도했지만 지나치게 복잡해 졌거나 Plain은 문제를 더 많이 복잡하게 만들었 기 때문에 구현에 대해 이해하지 못했습니다.

도와 주셔서 감사합니다.

도움이 되었습니까?

해결책

태그를 객체로 설정하여 솔직한 첫 번째 문제. 태그는 문자열이 아니라 유형 객체이기 때문에.

그리고 당신이 반사에 의해 해결되는 두 번째 문제는 태그의 값보다 propertyname과 정확히 일치해야합니다.

_objectToMapTo.GetType().InvokeMember(sender.tag,BindingFlags.Instance Or BindingFlags.Public,Nothing, _objectToMapTo, New Object() {sender.text})

면책 조항 반사는 가깝지만 아마도 100% 정확하지는 않습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top