Je crée un modèle d'objet pour un appareil qui a plusieurs canaux. Les noms utilisés entre le client et moi sont Channel
et ChannelSet
. ("Ensemble" n'est pas sémantiquement précis, car il est ordonné et un ensemble approprié ne l'est pas. Mais c'est un problème pour une autre période.)
J'utilise C #. Voici un exemple d'utilisation 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
Tout est dandy. Cependant, les clients ne sont pas des programmeurs et ils seront absolument déroutés par l'indexation zéro - le premier canal est le canal 1 pour eux. Mais, par souci de cohérence avec C #, je veux garder l' ChannelSet
index à partir de zéro .
Cela est sûr de provoquer des déconnexions entre mon équipe de développement et les clients lorsqu'ils interagissent. Mais pire, toute incohérence dans la façon dont cela est géré dans la base de code est un problème potentiel. Par exemple, voici un écran d'interface utilisateur où l'utilisateur final ( qui pense en termes de 1 indexation ) édite le canal 13:
Ce Save
bouton va finalement aboutir à du code. Si ChannelSet
est 1 indexé:
channels.GetChannel(13).SomeProperty = newValue; // notice: 13
ou ceci s'il est indexé zéro:
channels.GetChannel(12).SomeProperty = newValue; // notice: 12
Je ne sais pas vraiment comment gérer cela. Je pense que c'est une bonne pratique de garder une liste ordonnée et indexée d'entiers (les ChannelSet
) cohérente avec toutes les autres interfaces de tableau et de liste dans l'univers C # (par indexation zéro ChannelSet
). Mais alors, chaque morceau de code entre l'interface utilisateur et le backend aura besoin d'une traduction (soustrayez de 1), et nous savons tous à quel point les erreurs insidieuses et courantes de coup par coup sont déjà.
Alors, une décision comme celle-ci vous a-t-elle déjà mordu? Dois-je zéro index ou un index?