Saya membuat model objek untuk perangkat yang memiliki banyak saluran. Kata benda yang digunakan antara klien dan saya adalah Channel
dan ChannelSet
. ("Set" tidak akurat secara semantik, karena itu diatur dan set yang tepat tidak. Tapi itu masalah untuk waktu yang berbeda.)
Saya menggunakan C #. Berikut adalah contoh penggunaan 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
Semuanya keren. Namun, klien bukan pemrogram dan mereka benar - benar akan bingung dengan pengindeksan nol - saluran pertama adalah saluran 1 untuk mereka. Tapi, demi konsistensi dengan C #, saya ingin menjaga ChannelSet
indeks dari nol .
Ini pasti akan menyebabkan beberapa terputusnya antara tim dev saya dan klien ketika mereka berinteraksi. Tetapi lebih buruk lagi, setiap inkonsistensi dalam bagaimana hal ini ditangani dalam basis kode adalah masalah potensial. Misalnya, inilah layar UI tempat pengguna akhir ( yang berpikir dalam 1 indeks ) mengedit saluran 13:
Itu Save
tombol pada akhirnya akan menghasilkan beberapa kode. Jika ChannelSet
1 diindeks:
channels.GetChannel(13).SomeProperty = newValue; // notice: 13
atau ini jika nol diindeks:
channels.GetChannel(12).SomeProperty = newValue; // notice: 12
Saya tidak begitu yakin bagaimana menangani ini. Saya merasa ini adalah praktik yang baik untuk menjaga daftar hal-hal yang teratur (integer-indexed) dari hal-hal (yang ChannelSet
) konsisten dengan semua array dan daftar antarmuka lainnya di alam semesta C # (dengan pengindeksan nol ChannelSet
). Tapi kemudian setiap bagian kode antara UI dan backend akan membutuhkan terjemahan (kurangi dengan 1), dan kita semua tahu betapa berbahaya dan umum kesalahan yang sudah ada.
Jadi, pernahkah keputusan seperti ini menggigit Anda? Haruskah saya nol indeks atau satu indeks?