Komunitas C # telah di mana-mana menggunakan awalan "I" untuk menunjukkan sebuah antarmuka yang bahkan para programmer yang paling tidak berpengalaman pun tahu untuk menggunakannya.
Mengapa kemudian kita tidak awalan enums, kelas abstrak atau struct (mungkin masing-masing dengan "E", "A" dan "S")?
Sebagai contoh, jika kita menandai semua kelas abstrak dengan "A", itu akan memberikan informasi berharga tentang jenis itu yang, meskipun dapat disimpulkan, tidak segera jelas.
Harap dicatat bahwa saya tidak mendukung perubahan ini, saya hanya mencoba memahami mengapa kita tidak melakukan hal-hal seperti ini.
Utas ini menjawab mengapa kami menggunakan awalan "I" tetapi tidak menjawab mengapa kami tidak menggunakan awalan lain.
c#
.net
coding-standards
source-code
Stephen
sumber
sumber
Jawaban:
Inti dari konvensi penamaan untuk antarmuka adalah untuk memberikan keputusan yang cepat dan tanpa-otak tentang apa yang disebut antarmuka yang diimplementasikan oleh kelas Anda. Jika Anda memiliki
Frobnicator
, tetapi harus mendeklarasikan antarmuka untuk decoupling atau alasan apa pun, maka keputusan untuk memanggilnya tidakIFrobnicator
memerlukan pemikiran sadar, dan ini bagus.Masalah yang sama tidak berlaku untuk konstruksi lain yang Anda sebutkan. Enums dan struct berguna, tetapi tidak perlu mencari nama kedua , pendek, transparan, yang jelas terkait selain nama itu sendiri. Oleh karena itu, tidak ada tekanan untuk menampar 'E' pada nama enum atau struct.
(Kelas abstrak agak mirip dengan antarmuka, karena Anda harus menyediakan kelas kedua yang konkret untuk menyelesaikan sesuatu, sehingga mereka mungkin telah memperoleh konvensi mulai dengan 'A', tetapi untuk alasan apa pun, mereka tidak. Jika Saya boleh berspekulasi, saya pikir 'saya' menjadi huruf yang sangat sempit mungkin ada hubungannya dengan itu.)
sumber
AnimalBase
dan rasa yang berbedaAnimalGiraffe
,AnimalLion
dllList
, karena sangat teknis bernamaArrayList
danLinkedList
nama-nama implementasi. (C #, saya percaya, memilikiIList
sebagai antarmuka, danList
sebagai daftar array)Point p = myPoints[3]; p.X += 3;
akan mempengaruhimyPoints[3].X
. Secara retrospektif, saya lebih suka menggunakan C #var->field
untuk akses bidang-kelas danvar.field
untuk akses bidang-bidang, tetapi jelas tidak. Namun, tampaknya cara sekilas untuk membedakan mereka akan sangat membantu.Saya pikir itu tidak banyak digunakan karena:
Dari poin terakhir dan beberapa interpretasi Anda bisa menyimpulkan. Sistem Hongaria (tipe awalan) buruk dan tidak boleh digunakan. Aplikasi Hungaria (jenis awalan) telah digunakannya.
Mengambil kembali pertanyaan Anda, saya pikir notasi yang Anda usulkan adalah bentuk Aplikasi Hungaria dan jika Anda merasa bahwa nilai tambahnya menambah biaya dan Anda menerapkannya secara konsisten dalam basis kode Anda, itu baik-baik saja. Tetapi karena Anda harus mempertimbangkannya berdasarkan proyek, itu seharusnya tidak menjadi aturan umum.
Saya kira orang-orang memperhatikan bahwa itu memang untuk antarmuka lebih sering dan itulah sebabnya itu telah menjadi aturan umum untuk antarmuka.
sumber
Hanya pemikiran (semoga berlaku):
Ada kecenderungan yang jelas menuju 'coding to interfaces' daripada kelas-kelas yang konkret. "Saat ini" tampaknya lebih bermanfaat untuk memiliki konvensi penamaan untuk kelas-kelas, seperti memulai mereka dengan 'C', daripada memiliki huruf 'I' untuk antarmuka.
Saya baru saja mengakhiri proyek Java di mana semua Antarmuka benar-benar disebut Model .. Yap, konvensi nama antarmuka adalah untuk mengakhiri nama dengan 'Model' ... kemudian minta semacam 'DataTransferObject / DTO' mengimplementasikan antarmuka sebagai :
sedangkan di C #
Memberi rewiring otak saya untuk menjaga agar tetap lurus, tetapi saya bisa melihat bagaimana hal itu mungkin membantu untuk berpikir tentang pemrograman ke antarmuka.
sumber