새로운 System.Tuple 클래스를 사용하는 것이 좋지 않은 디자인입니까?


19

새 클래스를 인스턴스화하지 않고 단일 함수 호출로 여러 매개 변수를 반환 할 수 있다는 점에서 System.Tuple의 개념이 마음에 들지만 Microsoft Patterns & Practices, SOLID Principles 등과 같은 좋은 프로그래밍 방법을 무시합니다.

이 기능을 얼마나 자유롭게 사용해야하는지 또는 필요할 때 엣지 시나리오에서만 사용해야하는지 측정하려고합니다.


+1 : 훌륭한 질문입니다. 또한-Anders Hejlsberg가 이것에 무게를 두 었는지 궁금합니다.
Jim G.

답변:


11

사용의 문제점 Tuple은 일반 유형 매개 변수가 의미를 전달하지 않는다는 것입니다.

가독성을 위해 명명 된 멤버와 함께 사용자 정의 클래스 또는 익명 유형을 사용하는 것이 좋습니다.


XML 매개 변수 설명은 어떻습니까? 가장 확실한 곳은 아니지만 아무것도 아닌 것보다 낫습니다.
John Bubriski

@SkippyFire-무슨 뜻인가요? 당신이 얻을 모두의 유형입니다 T1, T2그들이 무슨 뜻인지 알려하지 않는다 등.
오디드

2
나는 (또는 우리 팀의 누군가) 튜플을 유형으로 사용할 때마다 코드의 다른 부분을 끊임없이 참조하여 .Item1, .Item2 등이 무엇인지 기억합니다. 완전히 사소한 것이 아닌 경우 별도의 클래스를 만듭니다. 앞으로 자신이하고있는 일을 알 수있는 기회를 가지십시오.
Joe

@Oded Tuple을 허용하는 메소드에 XML 문서를 추가하는 것에 대해 이야기하고 있습니다. 다시 한번 말하지만, 완벽하지는 않지만 Tuples를 사용하려는 경우 아무것도 아닌 것보다 낫습니다.
John Bubriski

1
@Oded 또한 매개 변수 또는 반환 값은 의미를 전달할 수 없지만 메서드 이름은 가능합니다. GetTopTwoPercentages()를 반환하는 메소드가 있다고 가정 해 봅시다 Tuple<decimal, decimal>. 충분히 명확 할 것입니다.
John Bubriski

8

가장 중요한 코드 품질 중 하나는 가독성입니다. 그래서 스스로에게 물어보십시오 :
내가 (즉, 다른 사람에서) 메소드 서명을 볼 때, 각각의 구성 요소가 무엇을 의미하는지 알고 Tuple있습니까?
예를 들어, 반환하는 수레 쌍이 극좌표 세트 인 경우 이것이 분명합니까?

이것은 분명하다 :

Tuple<Float, Float> getPolarCoords();

이것은 직교 좌표를 가정하기 때문에 오도의 소지가 있습니다.

Tuple<Float, Float> getCoords();

그리고 이것은 의미가 없습니다.

Tuple<Float, Float> getTuple();

따라서 일반적으로, 당신은 경우에 따라 명확성을 평가하고 필요한 경우 리팩토링합니다. Tuple여러 장소에서 와 같은 종류의 데이터를 나타내는 경우 클래스를 만드는 것이 좋습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.