Я создаю объектную модель для устройства, которое имеет несколько каналов. Существительные, используемые между клиентом и мной, 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
Все денди. Однако клиенты не являются программистами, и их абсолютно смущает нулевая индексация - первый канал - это канал 1 для них. Но для согласованности с C # я хочу сохранить ChannelSet
индексированное значение с нуля .
Это обязательно вызовет некоторые разногласия между моей командой разработчиков и клиентами, когда они взаимодействуют. Но что еще хуже, любое несоответствие в том, как это обрабатывается в кодовой базе, является потенциальной проблемой. Например, вот экран пользовательского интерфейса, где конечный пользователь ( который думает с точки зрения 1 индексации ) редактирует канал 13:
Эта Save
кнопка в конечном итоге приведет к некоторому коду. Если ChannelSet
индексируется 1:
channels.GetChannel(13).SomeProperty = newValue; // notice: 13
или это, если оно проиндексировано нулями:
channels.GetChannel(12).SomeProperty = newValue; // notice: 12
Я не совсем уверен, как справиться с этим. Я чувствую, что это хорошая практика - поддерживать упорядоченный список с целочисленной индексацией ( ChannelSet
), совместимый со всеми остальными интерфейсами массивов и списков во вселенной C # (путем нулевой индексации ChannelSet
). Но тогда каждому фрагменту кода между пользовательским интерфейсом и серверной частью потребуется перевод (вычитание на 1), и мы все знаем, насколько коварными и распространенными ошибками уже являются ошибки.
Значит, такое решение тебя когда-нибудь укусило? Должен ли я обнулить индекс или один индекс?