2012-02-20 2 views
0

내 "Business Objects"에 "Admin Tables"를 표시하는 적절한 방법은 무엇입니까? 내 주소 개체에 다음과 같은 있습니다.KeyValuePair <>를 속성 대 별도 클래스로 사용

public class Address 
{ 
    public int AddressID { get; set; } 
    public KeyValuePair<short, string> County { get; set; } 
    ... 
} 

지금은 멀리 KeyValuePair<,> 특성이가는대로,이 개체의 인스턴스를 얼마나?

내 생각은 다음과 같습니다

var myAddress = new Address { AddressID = 3, County = new KeyValuePair<short, string>(32, "La Crosse")} 

편집

이 내가 다른 프로그래머의 권고에 KeyValuePair<>로 교체하고있는 무슨이다.

.....Address.cs..... 
public County County { get; set; } 

.....County.cs..... 
public class County 
{ 
    public short? CountyID { get; set; } 

    public string CountyName { get; set; } 
} 

두 번째 또는 세 번째 방법 중에서 더 나은 방법이 있습니까?

+1

KVP 값이 데이터베이스에서 오는 값입니까? 열거 형으로 추출 할 수 있으므로 마법 숫자/문자가 약간 덜 마법적입니까? – 48klocs

+8

이 상황에서'KeyValuePair'를 사용하지 말 것을 권합니다. 개발자는 'Key'또는 'Value'가 실제로 무엇인지 명확하게 볼 수 없습니다 (카운티의'Short 'Key는 무엇입니까?). 자신과 동료의 삶을 편하게하기위한 적절한 속성 이름을 가진 유형을 만듭니다. – Lukazoid

+0

부적절한 회원을 삭제했습니다. 동의하지 않으시면 되돌려주십시오. – CodesInChaos

답변

3

방금 ​​코드를 실행했으며 예상대로 작동했습니다.

country 속성들은 정확한 값을 Key = 32La Crosse = Value있다.


새 코드는 추합니다. 나는 Country 속성의 설정자를 제거하거나 Country 클래스를 불변으로 만듭니다. 이런 종류의 double mutability는 일어날 수없는 버그입니다.

Country 클래스를 불변으로 만드는 것은 Id =>Name 매핑이 수정 되었기 때문에 올바른 결정일 수 있습니다.

내가 사용하는 것 :

public class County 
{ 
    public short? ID { get; private set; } 
    public string Name { get; private set; } 

    private Country(short? id,string name) 
    { 
     ID=id; 
     Name=name; 
    } 
} 
+0

그런 다음 '카운티'의 이름을 변경해야한다면? 어떤 가능성이 매우 높습니다. 기존의 카운티를 실제로 업데이트하기를 원하는 시점에 새로운 '카운티'를 만드는 것이 옳다고 생각하지 않습니다. 나는 당신의 접근 방식이 이것에 어떤 것인지 듣는 것에 관심이 있습니다. – Lukazoid

+0

대부분의 경우 런타임시 국가 이름을 변경할 필요가 없습니다.로드시 한 번만 변경하십시오. 국가마다 이름이 항상 바뀌는 것은 아닙니다. 그러나 여러분이 그렇게하더라도, 변화는 단지 국가가 방금 사용되는 곳을 통하지 않고서 Country 클래스 내부에서 일어나야합니다. 예를 들어, 새로운 국가 정의 파일을로드합니다. – CodesInChaos

0

Lukazoid이 사실 버스를 할 수없는 이유는 좋은 힌트를주고, 당신이 보여주고 초기화 잘 작동합니다. 디버거를 사용하여 쉽게 테스트 할 수 있습니다. 질문은 무엇입니까?

3

KeyValuePair<T1, T2>이 경우에는 아무 것도 사지 않습니다.

왜 분명하지 않습니까?

public class Address 
{ 
    public int AddressID { get; set; } 
    public int CountyCode { get; set; } 
    public string CountyName { get; set; } 
} 

또는 다른 버전이 두 속성 유형 County를 정의하는 것이 될 것이다, 그럼 대신 해당 유형의 속성이 있습니다.

코드에서 선명도가 왕입니다.

0

Country 객체를 만들어 그 짧은 문자열과 문자열이 무엇을 나타내는 지 명확하게하십시오.

관련 문제