Ich erstelle ein Objektmodell für ein Gerät mit mehreren Kanälen. Die zwischen dem Klienten und mir verwendeten Substantive sind Channel
und ChannelSet
. ("Menge" ist semantisch nicht genau, weil es geordnet ist und eine richtige Menge nicht. Aber das ist ein Problem für eine andere Zeit.)
Ich benutze C #. Hier ist ein Anwendungsbeispiel für 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
Alles ist gut. Die Clients sind jedoch keine Programmierer und werden durch die Nullindizierung absolut verwirrt - der erste Kanal ist für sie Kanal 1. Aus Gründen der Konsistenz mit C # möchte ich jedoch den ChannelSet
Index von Null halten .
Dies wird sicher einige Verbindungsabbrüche zwischen meinem Entwicklerteam und den Clients verursachen, wenn diese interagieren. Schlimmer noch, jegliche Inkonsistenz in der Handhabung innerhalb der Codebasis ist ein potenzielles Problem. Hier ist zum Beispiel ein UI-Bildschirm, in dem der Endbenutzer ( der an 1 Index denkt ) Kanal 13 bearbeitet:
Dieser Save
Knopf wird irgendwann einen Code ergeben. Wenn ChannelSet
1 indiziert ist:
channels.GetChannel(13).SomeProperty = newValue; // notice: 13
oder dies, wenn es null indiziert ist:
channels.GetChannel(12).SomeProperty = newValue; // notice: 12
Ich bin mir nicht sicher, wie ich damit umgehen soll. Ich halte es für eine gute Praxis, eine geordnete, ganzzahlig indizierte Liste von Dingen zu führen, die ChannelSet
mit allen anderen Array- und Listenschnittstellen im C # -Universum konsistent sind (durch Null-Indizierung ChannelSet
). Aber dann muss jeder Code zwischen der Benutzeroberfläche und dem Backend übersetzt werden (abzüglich 1), und wir alle wissen, wie heimtückisch und häufig Fehler sind, die nur einmal vorkommen.
Hat Sie eine solche Entscheidung jemals gebissen? Soll ich einen Index oder einen Nullindex haben?