Birden fazla kanalı olan bir cihaz için bir nesne modeli oluşturuyorum. Müşteri ile ben arasında kullanılan isimler Channel
ve ChannelSet
. ("Set" anlamsal olarak doğru değildir, çünkü sıralanmıştır ve uygun bir set değildir. Ama bu farklı bir zaman için bir problemdir.)
C # kullanıyorum İşte bir kullanım örneği 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
Hepsi züppe. Bununla birlikte, istemciler programcı değildir ve kesinlikle sıfır indeksleme ile karıştırılırlar - ilk kanal onlara kanal 1'dir. Ancak, C # ile tutarlılık uğruna, ChannelSet
endekslenmiş sıfırdan tutmak istiyorum .
Bunun, dev ekibim ile müşteriler arasında etkileşim kurduğunda bazı bağlantıların kesilmesine neden olacağından emin olabilirsiniz. Daha da kötüsü, bunun kod temeli içerisinde nasıl ele alındığına dair herhangi bir tutarsızlık potansiyel bir problemdir. Örneğin, burada (1 indeksleme açısından düşünen son kullanıcının ) kanal 13'ü düzenlediği bir UI ekranı :
Bu Save
düğme sonunda bir kodla sonuçlanacak. Eğer ChannelSet
1 endeksli:
channels.GetChannel(13).SomeProperty = newValue; // notice: 13
ya da eğer sıfır indekslenmişse:
channels.GetChannel(12).SomeProperty = newValue; // notice: 12
Bununla nasıl başa çıkacağımdan emin değilim. Sıralı, tamsayı indeksli bir şeylerin listesini (the ChannelSet
) tüm diğer dizi ile tutarlı tutmak ve C # evrendeki arayüzleri listelemek için iyi bir uygulama gibi hissediyorum (sıfır indeksleme ile ChannelSet
). Fakat kullanıcı arayüzü ile arka uç arasındaki her kod parçası bir çeviriye ihtiyaç duyacak (1 ile çıkartma) ve hepimiz ne kadar sinsi ve yaygın bir hatalar olduğunu biliyoruz.
Peki, böyle bir kararın seni hiç ısırması oldu mu? Sıfırlama endeksi mi yoksa bir endeks mi yapmalıyım?