我正在为具有多个通道的设备创建对象模型。客户和我之间使用的名词是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
索引从零开始。
当我的开发团队和客户进行交互时,这肯定会导致他们之间的脱节。但更糟糕的是,在代码库中如何处理此问题的任何不一致都是潜在的问题。例如,这是一个UI屏幕,最终用户(根据1个索引进行思考)正在编辑频道13:
该Save
按钮最终将产生一些代码。如果ChannelSet
索引为1:
channels.GetChannel(13).SomeProperty = newValue; // notice: 13
或如果它的索引为零:
channels.GetChannel(12).SomeProperty = newValue; // notice: 12
我不确定如何处理。我觉得这是个好习惯,即使有序的,整数索引的事物列表(ChannelSet
)与C#Universe中的所有其他数组和列表接口保持一致(通过零索引ChannelSet
)。但是,然后,UI和后端之间的每一段代码都需要翻译(减1),我们都知道隐患和常见的一对一错误已经是多么的隐秘。
那么,这样的决定有没有咬过你?我应该零索引还是一个索引?