Estou criando um modelo de objeto para um dispositivo que possui vários canais. Os substantivos usados entre o cliente e eu são Channel
e ChannelSet
. ("Conjunto" não é semanticamente preciso, porque é pedido e um conjunto adequado não é. Mas isso é um problema para um tempo diferente.)
Eu estou usando c #. Aqui está um exemplo de uso de 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
Tudo é dândi. No entanto, os clientes não são programadores e absolutamente ficarão confusos com a indexação zero - o primeiro canal é o canal 1 para eles. Mas, por uma questão de consistência com o C #, quero manter o ChannelSet
indexado do zero .
Isso certamente causará algumas desconexões entre minha equipe de desenvolvimento e os clientes quando eles interagem. Porém, pior ainda, qualquer inconsistência em como isso é tratado na base de código é um problema em potencial. Por exemplo, aqui está uma tela da interface do usuário em que o usuário final ( que pensa em termos de 1 indexação ) está editando o canal 13:
Esse Save
botão acabará resultando em algum código. Se ChannelSet
for 1 indexado:
channels.GetChannel(13).SomeProperty = newValue; // notice: 13
ou isso se for zero indexado:
channels.GetChannel(12).SomeProperty = newValue; // notice: 12
Não tenho muita certeza de como lidar com isso. Eu sinto que é uma boa prática manter uma lista ordenada e indexada por números inteiros ( ChannelSet
consistente) com todas as outras interfaces de matriz e lista no universo C # (por indexação zero ChannelSet
). Mas todo código entre a interface do usuário e o back-end precisará de uma tradução (subtrair por 1), e todos sabemos como os erros off-by-one comuns e insidiosos já são.
Então, uma decisão como essa já te mordeu? Devo zerar o índice ou um índice?