Saya ingat dengan jelas bahwa, pada suatu waktu, pedoman yang didorong oleh Microsoft adalah menambahkan sufiks "Base" ke kelas abstrak untuk meniadakan fakta bahwa itu abstrak. Oleh karena itu, kami memiliki kelas seperti System.Web.Hosting.VirtualFileBase
, System.Configuration.ConfigurationValidatorBase
, System.Windows.Forms.ButtonBase
, dan, tentu saja, System.Collections.CollectionBase
.
Tapi saya perhatikan bahwa, akhir-akhir ini, banyak kelas abstrak dalam Framework sepertinya tidak mengikuti konvensi ini. Misalnya, kelas-kelas berikut semuanya abstrak tetapi tidak mengikuti konvensi ini:
System.DirectoryServices.ActiveDirectory.DirectoryServer
System.Configuration.ConfigurationElement
System.Drawing.Brush
System.Windows.Forms.CommonDialog
Dan itulah yang bisa saya kembangkan dalam beberapa detik. Jadi saya mencari apa yang tertulis di dokumentasi resmi, untuk memastikan saya tidak gila. Saya menemukan Nama Kelas, Struktur, dan Antarmuka di MSDN di Pedoman Desain untuk Mengembangkan Perpustakaan Kelas . Anehnya, saya tidak dapat menemukan pedoman untuk menambahkan "Base" di akhir nama kelas abstrak. Dan pedoman tidak lagi tersedia untuk versi 1.1 dari Framework.
Jadi, apakah saya kehilangannya? Apakah pedoman ini pernah ada? Apakah itu ditinggalkan begitu saja tanpa sepatah kata pun? Apakah saya telah membuat nama kelas yang panjang sendirian selama dua tahun terakhir secara gratis?
Seseorang melempar saya tulang di sini.
Perbarui Saya tidak gila. Pedoman itu ada. Krzysztof Cwalina mengeluhkannya pada tahun 2005.
sumber
Jawaban:
In Framework Design Guidelines p 174 menyatakan:
Juga: http://blogs.msdn.com/kcwalina/archive/2005/12/16/BaseSuffix.aspx
sumber
Juga, jika kelas abstrak memiliki beberapa anggota statis yang akan digunakan, 'Basis' bisa menjadi jelek.
sumber
Saya tidak ingat pedoman seperti itu. Saya yakin Anda harus menggunakan penamaan yang masuk akal. Terkadang kelas abstrak hanya dirancang untuk menyediakan fungsionalitas umum untuk beberapa kelas (sebagai alat), yang menurut saya harus memiliki sufiks. Namun, dalam beberapa kasus, Anda ingin menggunakannya sebagai basis hierarki polimorfisme yang tidak lengkap itu sendiri. Dalam kasus tersebut saya menyarankan penamaan seperti kelas normal.
Seperti yang Anda lihat, Anda mungkin tidak akan mendeklarasikan metode yang menerima ButtonBase sebagai parameter. Ini dirancang untuk memberikan fungsionalitas minimal untuk subclass. Namun, Anda mungkin memperlakukan a
ConfigurationElement
sebagai entitas yang memiliki bentuk berbeda tetapi tidak lengkap dengan sendirinya (dan karenanya abstrak)sumber
Terkadang Basis masih diperlukan, terutama saat Anda menyediakan kelas konkret dan kelas abstrak bagi seseorang untuk diperluas guna membuat implementasi konkret.
misalnya Controller dan ControllerBase (sebenarnya Controller juga abstrak, tetapi menyediakan fungsionalitas yang jauh lebih signifikan daripada ControllerBase)
Akhiran dasar jelek saat memprogram dengan antarmuka, jadi menurut saya pedoman Microsoft untuk tidak menggunakannya berlaku ketika kelas abstrak sebagian besar digunakan seperti antarmuka. Mungkin yang mereka maksud dengan API Publik.
Intinya adalah ada kasus di mana tidak ada alternatif yang lebih baik untuk menggunakan akhiran dasar.
sumber
Saya memahami keinginan untuk menghindari Base-Sufiks, tapi saya juga memahami kebutuhan untuk beberapa Akhiran. Sekarang, Komentar artikel ini menyarankan penggunaan "Type" sebagai Suffix sebagai pilihan kedua untuk tidak menggunakan apapun. Saya percaya ini membingungkan, tetapi Gagasan bahwa "kata yang tidak berkomitmen seperti itu cenderung menunjukkan bahwa itu adalah kelas yang tidak berkomitmen" melekat pada saya.
Sebagai Alternatif: Saya lebih suka menggunakan "Jenis" sebagai sufiks untuk menyatakan objek sebagai "dari atau milik ras atau keluarga tertentu" ( Wiktionary: -kind ).
Contoh:
DataProvider
danReflectiveDataProvider
keduanyaDataProviderKind
Terinspirasi oleh Biology di mana misalnya "canis lupus" milik keluarga "Canoidea", yang secara kasar diterjemahkan menjadi "dog-ish".
sumber
Microsoft menyatakan, di:
https://docs.microsoft.com/en-us/dotnet/standard/design-guidelines/names-of-classes-structs-and-interfaces
"✓ PERTIMBANGKAN mengakhiri nama kelas turunan dengan nama kelas dasar. Ini sangat mudah dibaca dan menjelaskan hubungannya dengan jelas. Beberapa contoh kode ini adalah: ArgumentOutOfRangeException, yang merupakan semacam Exception, dan SerializableAttribute, yang merupakan jenis Atribut. Namun, penting untuk menggunakan penilaian yang wajar dalam menerapkan pedoman ini; misalnya, kelas Tombol adalah sejenis peristiwa Kontrol, meskipun Kontrol tidak muncul dalam namanya. "
Secara umum, ini secara implisit mengesampingkan penggunaan "Base" dalam nama.
sumber