2013-07-26 2 views
1

2 개의 클래스가 있습니다. 하나는 ReferenceType 값을 처리하고, 다른 하나는 ValueType 값에 대해 동일한 작업을 수행합니다. 이것은 유일한 차이점이지만 중요합니다. 나는 각 클래스에 알맞은 이름을 찾기 위해 고심하고있다 :ReferenceType 값과 ValueType 값에 대한 부끄러운 이름

  • ReferenceTypeValueHandler 및 ValueTypeValueHandler?

Neah, ValueTypeValue 혼란스러운 소리입니다.

  • ClassValueHandler 및 StructValueHandler?

클래스 이름에 "클래스"를 사용하면 안됩니다.

  • NullableValueHandler 및 NonNullableValueHandler?

"null 허용"은 이미 널 값 유형 (null 허용 <>)

  • HeapValueHandler 및 StackValueHandler 사용합니까?

그건 바보입니다. 참조 유형 값이 힙 및 값 유형 값에 저장된다는 사실을 이용하면 누가 신경 써야합니까? 또한 "스택"은 스택과 관련이 있다는 것을 의미하는 혼란 스럽습니다.

더 이상의 아이디어가 있습니까?

업데이트 :

어떤 사람들은 내가 클래스의 목적을 설명해야 좋습니다. 글쎄, 내가 중요하다고 생각하지는 않지만, 여기있다 : 나는 XML to entity 디시리얼라이저를 만들고있다. XmlReader를 사용하여 DOM을 사용하는 대신 유선 읽기를 활용합니다. XML을 읽으면서 엔티티를 만듭니다. 일부 엔티티는 다른 것들에 대한 래퍼 일뿐입니다. 이러한 래퍼는 단일 엔터티 또는 엔터티의 컬렉션 (열거 가능) 중 하나를 사용할 수 있습니다. 단일 실체를 사용하는 경우,이 실체가 제공되어야하며 정확히 한 번만 제공되어야합니다. XML에없는 경우 문제가됩니다. XML에 1보다 큰 값이 있으면 문제도 발생합니다. 따라서 엔티티가 정확히 한 번 제공되도록 보장하고 유지하려면 클래스 ValueKeeper<TValue>이 있어야합니다. 그것에는 TakeValue(TValue value)TValue ClaimValue()의 두 가지 방법이 있습니다. TakeValue 메소드는 값을 취하여 이전에 제공된 값이 있는지 검사하고, 그렇다면 적절한 세부 사항과 함께 예외를 던집니다. ClaimValue 메서드는 래퍼 XML의 읽기가 완료되고 래퍼 엔티티가 스크래핑 된 값 위에 만들어지면 호출됩니다.이 메서드는 TakeValue 메서드를 통해받은 값이 있는지 확인합니다. 그렇다면 그냥 반환합니다. 값이 아닌 경우 예외를 throw합니다. 이제 문제는 참조 형식 값에 대해 값이 제공되었는지 확인하기 위해 NULL과 비교를 사용하고 있다는 것입니다. 이러한 비교를 가능하게하려면 TValue 유형 매개 변수에 대한 일반 제한 조건이 있어야합니다 (where TValue: class). 이 제약 조건을 적용하면 값 유형 값에이 클래스를 사용할 수 없습니다. 그래서 동일한 클래스를 필요로하지만 where TValue: struct 값을 사용하여 Nullable<TValue> 필드를 사용하여 제공되거나 제공되지 않은 값을 유지합니다. 이제는 ValueKeeper만으로는 갈 수없는 2 가지 클래스가 있으므로 참조 유형에는 하나의 이름이 필요하고 값 유형 값에는 또 다른 이름이 필요합니다. 여기에 문제가 제기됩니다. 이 미묘한 차이를 표현할 방법이 필요합니다.그러나 다시 한 번 클래스가하는 일은 중요하지 않습니다. 중요한 점은이 차이를 명확하게 표현하는 적절한 방법을 찾는 것입니다.

+1

클래스의 목적을 자세히 설명하는 것이 도움이 될 수 있습니다. –

+0

클래스의 목적은 말 그대로 그 값을 유지하고 그것이 제공되었는지 확인하는 것입니다. 실제로 중요하지 않은 클래스의 나머지 이름은 무엇이든 될 수 있습니다. 중요한 것은 클래스가 작동하는 값의 종류를 반영하는 것입니다. –

+0

안녕하세요, @bonomo, valueObject == null 대신 Equals (valueObject, default (TValue))를 사용하셨습니까? 참조 유형과 값 유형간에 차이를 만들 필요가 없습니다. – Marc

답변

2

나는 클래스 이름의 나머지 부분이 중요하지 않다는 것에 동의하지 않을 것이다. 당신은 당신의 코드를 스스로 말하고, 독자가 클래스/구조체를 디자인 할 때 염두에 두었던 개념을 이해하기 쉽게하고 싶다. 클래스 이름을 사용하면 클래스가 실제로 무엇을하고 있는지 알 수 없습니다. 보다 구체적인 이름을 검색하는 것이 좋습니다. 가치는 어떻게 처리됩니까? 어떤 가치가 있습니까?

구조체와 클래스 값이 클래스이고 구조체와 클래스 값이 구조적으로 다른 점과 구조체와 클래스 값이 구조체와 구조체의 차이점은 무엇입니까? 그렇지 않으면 구조체와 클래스 (DRY)와 동일한 것을 갖는 것이 적절하지 않기 때문에 더 많은 차이가 있어야합니다.

매우 추상적 인 작업 인 경우 패턴 또는 개념의 일반 이름을 검색하십시오. 값을 유지하고 그것이 제공되었는지 확인하려면 캐싱 메커니즘과 비슷하게 들릴까요?

두 번째로 의미 론적 문제에 직면합니다. 가치 유형의 '값'과 참조 유형의 '값'을 포함하는 용어는 무엇입니까? 우리는 .NET 프레임 워크의 상속 체인을 여기에 물어보고 개체과 같이 호출 할 수 있습니다.

따라서이 경우 CacheForValueTypeObjectsCacheForReferenceTypeObjects과 같은 것이 작동 할 수 있습니다. 나는 캐시가 그 목적을 잘 표현하고 있는지 알지 못한다. 그러나 그렇지 않다면 나는 그 클래스의 '최종'목적을 가장 잘 설명하는 용어를 찾고자 할 것이다.

나는 '정말로, 지금 정말로 필요한 것은 ValueTypeValueHandler입니다!'라고 생각하지 않았을 것입니다. ' 더 많은 것이있었습니다. ;) 나는 이런 종류의 질문을 좋아한다, 고마워!

+0

+1 좋은 대답 ... – MoonKnight

+0

I 방금 질문을 업데이트했습니다. CacheForValueTypeObjects는 괜찮은 것 같습니다. 고려해 볼 수도 있습니다. 감사합니다. –

관련 문제