여러 채널이있는 장치의 개체 모델을 만들고 있습니다. 클라이언트와 내가 사용하는 명사는 Channel
및 ChannelSet
입니다. ( "세트"는 순서가 있고 적절한 세트가 아니기 때문에 의미 적으로 정확하지 않습니다. 그러나 그것은 다른 시간에 대한 문제입니다.)
C #을 사용하고 있습니다. 사용 예는 다음과 같습니다 ChannelSet
.
// load a 5-channel ChannelSet
ChannelSet channels = ChannelSetFactory.FromFile("some_5_channel_set.json");
Console.Write(channels.Count);
// -> 5
foreach (Channel channel in channels) {
Console.Write(channel.Average);
Console.Write(", ");
}
// -> 0.3, 0.3, 0.9, 0.1, 0.2
모두 멋쟁이입니다. 그러나 클라이언트는 프로그래머가 아니며 인덱싱 0 으로 인해 혼란 스러울 것입니다. 첫 번째 채널은 채널 1입니다. 그러나 C #과의 일관성을 유지하기 위해 ChannelSet
인덱스를 0에서 유지하고 싶습니다 .
이로 인해 개발자 팀과 고객이 상호 작용할 때 연결이 끊어 질 수 있습니다. 그러나 이것이 코드베이스 내에서 이것이 어떻게 처리되는지에 대한 불일치가 잠재적 인 문제입니다. 예를 들어, 최종 사용자 ( 1 인덱싱으로 생각하는 )가 채널 13을 편집 하는 UI 화면이 있습니다 .
그 Save
버튼은 결국 어떤 코드를 만들 것입니다. ChannelSet
1이 색인 된 경우 :
channels.GetChannel(13).SomeProperty = newValue; // notice: 13
또는 인덱스가 0 인 경우 :
channels.GetChannel(12).SomeProperty = newValue; // notice: 12
이 문제를 어떻게 처리해야할지 잘 모르겠습니다. ChannelSet
C # 유니버스의 다른 모든 배열 및 목록 인터페이스와 일치 하는 정렬 된 정수 색인 항목 목록 ( ) 을 유지하는 것이 좋습니다 (0 인덱싱 ChannelSet
). 그러나 UI와 백엔드 사이의 모든 코드는 번역이 필요하며 (1을 빼면) 교활하고 일반적인 off-by-one 오류가 이미 얼마나 많은지 알고 있습니다.
그래서, 당신과 같은 결정이 당신을 물린 적이 있습니까? 인덱스를 0 또는 1로해야합니까?