Apa pendekatan yang direkomendasikan untuk penamaan kelas dasar? Apakah itu mengawali nama tipe dengan " Base " atau " Abstract " atau apakah kita akan mencampurkannya dengan "Base"?
Pertimbangkan hal berikut:
jenis: ViewModel
misalnya MainViewModel , ReportViewModel
kelas dasar: BaseViewModel
atau ViewModelBase
atauAbstractViewModel
Pertimbangkan juga:
ketik: Product
misalnya VirtualProduct , ExpiringProduct
kelas dasar: BaseProduct
atau ProductBase
atauAbstractProduct
Mana yang menurut Anda lebih standar?
class Entity : EntityBase
{
}
atau
class Entity : BaseEntity
{
}
c#
naming-conventions
base-class
Soni Ali
sumber
sumber
Jawaban:
Ada contoh dalam Kerangka dengan akhiran Base, misalnya
System.Configuration.Provider.ProviderBase
,System.Web.SessionState.SessionStateStoreProviderBase
.Tetapi tidak berarti semua kelas dasar abstrak dalam Framework mengikuti konvensi ini (misalnya
System.Data.Common.DbParameter
,System.Data.Common.DbCommand
).Secara pribadi saya akan menghindari penggunaan sufiks kecuali saya ingin menekankan fakta bahwa ini adalah kelas abstrak dan merasa bahwa jika tidak, pengguna kelas mungkin mengharapkan nama tersebut untuk menunjukkan implementasi konkret.
sumber
Avoid
menamai kelas dasar denganBase
sufiks jika kelas tersebut dimaksudkan untuk digunakan dalam API publik." Pedoman Desain Kerangka, halaman 174Bukan dari salah satu di atas. Pertimbangkan tujuan apa yang disediakan kelas dasar Anda; beri nama itu. Misalnya, kelas dasar Mobil dan Sepeda bisa jadi Kendaraan.
Jika Anda membuat kelas dasar hanya untuk memiliki kelas dasar dari satu kelas, dan tanpa tujuan atau alasan selain itu, Anda mungkin melakukan sesuatu yang salah.
sumber
Jika Anda berbicara tentang kelas basis virtual, standar Microsoft adalah ClassnameBase (seperti CollectionBase.)
sumber
Saya pikir ini masalah pilihan. Saya akan mengatakan jika Anda membuat banyak kelas dasar maka mungkin lebih baik menggunakan BaseClassname selalu karena dengan cara itu Anda SELALU dapat mengetahui kelas dasar apa yang dapat Anda mulai gunakan hanya dengan mengetikkan Base dan mendapatkan bantuan lainnya dari Intellisense. Bagaimana jika Anda memiliki 20 kelas dasar dan Anda menambahkan Basis sebagai sufiks dan Anda lupa apa nama kelas dasar? Apakah Anda ingin membuat diagram kelas terlebih dahulu dari VS dan mencari tahu kelas dasar apa yang tersedia? Tidak apa-apa untuk menamai mereka ClassBase jika hanya ada satu atau dua kelas.
Hal yang sama berlaku untuk keputusan antara fungsi GetItems dan ItemsGet. Saya akan mengatakan untuk setidaknya demi keterbacaan - pilih GetItems. Ikuti konvensi :)
sumber
GetItems
tidak bekerja— "Get" hanyalah sebuah kata kerja dan dengan demikian hanya membuat pengertian gramatikal bahasa Inggris sebagai awalan, sedangkan "Base" berfungsi baik sebagai kata sifat (awalan) atau kata benda (sufiks).abstract
.Kami menggunakan BaseEntity, tetapi menurut saya itu adalah preferensi Anda sendiri. Saya sering melihat yang lain.
Bersikaplah konsisten dalam konteks Anda, baik itu proyek Anda, namespace atau jika mungkin, tim Anda. Konvensi yang berbeda lebih buruk daripada IMHO konvensi yang buruk.
sumber
Secara pribadi, saya akan merekomendasikan untuk tidak menambahkan basis kata sama sekali. Anda tidak pernah tahu kapan Anda harus mengubah kode di sekitar dan itu tidak akan menjadi objek dasar lagi. Karena itu, kami telah melakukan ini di masa lalu, kami memberi awalan kata Base di depan. Sepertinya mengalir lebih baik.
sumber
BaseEntity sangat mirip dengan camel case - strName, bseEntity. Saya akan memilih EntityBase karena ini mendefinisikan subjek terlebih dahulu, yang akan membantu Anda mengidentifikasi fungsinya lebih cepat.
sumber
Selalu pikirkan tentang alfabet saat Anda menyebutkan sesuatu. Saya benar-benar tidak suka melihat server SQL dan setiap prosedur yang tersimpan dinamai usp [sesuatu]. Sejalan dengan itu, jangan terlalu sering menggunakan Get dan Set sebagai nama depan untuk suatu fungsi. Alih-alih GetItems atau PlaceOrder, pikirkan untuk menamainya sebagai ItemsGet atau OrderPlace.
Jadi, secara umum, ClassnameBase / EntityBase akan menjadi pilihan yang lebih baik.
sumber