Ok, saya mengerti kebiasaan menggunakan kata kerja dengan fungsi dan kata benda dengan kelas. Bagaimana dengan antarmuka? Apakah ada metodologi saat membuat nama antarmuka yang mungkin tidak begitu jelas?
Hanya untuk memperjelas, saya tidak berbicara tentang apakah akan meletakkan "I" di depan nama atau jika menggunakan camelCase atau PascalCase. Saya bertanya-tanya tentang metode mencari tahu nama semantik yang jelas untuk sebuah antarmuka.
EDIT Saya terobsesi tentang cara memberi nama antarmuka dengan cara yang paling jelas. Saya kira itu hanya perlu menjadi kata benda juga karena ketika saya memikirkan penamaan kelas saya memikirkan objek dunia "nyata" terdekat yang bisa dihubungkan dengannya. Saya kira antarmuka dunia nyata adalah hal-hal seperti keyboard, mouse, remote control, layar ATM. Itu semua adalah kata benda. Bagaimanapun, wawasan tambahan apa pun tentang cara yang baik untuk merumuskan nama antarmuka akan dihargai.
sumber
Jawaban:
Saya akan mengatakan itu tergantung pada apa yang mendefinisikan antarmuka. Dalam beberapa kasus ketika antarmuka agak spesifik dan rinci, saya pikir kata benda adalah yang terbaik. Contohnya adalah
IList
,ICollection
.Kadang-kadang meskipun antarmuka lebih tentang menambahkan fitur umum tertentu ke kelas. Dalam hal ini saya pikir kata sifat adalah yang terbaik. Contohnya adalah
IDisposable
,IEnumerable
, ...Mungkin cara lain untuk memikirkan ini adalah berapa banyak "kemampuan" yang didefinisikan oleh antarmuka Anda.
Sebagai contoh,
IList<T>
antarmuka mendefinisikan kemampuan ini: Tambah, Hapus, Berisi, Sisipkan, Hapus, ... Ini semua adalah properti daftar jadiIList
adalah nama yang bagus.IDisposable
di sisi lain hanya mendefinisikan satu kemampuan: Buang. Jadi sangat cocok untuk segala sesuatu yang sekali pakai. Karena itulah namanyaIDisposable
.sumber
IEnumerable
), kata benda "_er" jika antarmuka Anda akan dinamai berdasarkan hal-hal yang dilakukan objek Anda ke objek lain ( misalnyaIEqualityComparer
), dan kata benda umum jika antarmuka Anda dinamai berdasarkan jenis hal yang perilakunya meniru (misalnyaIList<T>
).I
berlebihan.Sebuah antarmuka menggambarkan perilaku sehingga nama-nama harus mengatakan begitu. Saya tidak yakin tentang aturan untuk ini tetapi Anda akan tahu nama ketika Anda mendengarnya.
Beberapa contoh:
Saya pikir itu tidak pantas untuk menamai antarmuka dengan
I
dan memanggilSet
denganISet
karena, sebagai pengembang, Anda tidak perlu khawatir apakah itu antarmuka atau kelas. Saya melihat praktik ini tidak ada di Jawa sekarang.sumber
I
itu tidak penting. Lalu mengapa tidak mengawali kelas abstrak denganA
, kelas reguler denganC
dll ??Karena antarmuka benar-benar hanya sebuah ekspresi dari "apa" tetapi bukan "bagaimana" dari suatu jenis, saya akan menamai mereka dengan cara yang sama seperti Anda memberi nama kelas, setidaknya dari bagian perspektif bicara. Satu-satunya hal yang dapat saya tambahkan ke ini adalah bahwa mereka sering akan menjadi lebih umum daripada pelaksana spesifik (misalnya antarmuka "Pelanggan" mungkin memiliki pelaksana "ProspectiveCustomer" dan "PayingCustomer").
sumber
Antarmuka digunakan seperti kelas. Oleh karena itu, itu juga harus dinamai dengan kata benda ketika Anda memberi nama kelas dengan kata benda. Pilih kata benda abstrak, misalnya "Kendaraan" ketika kelasnya adalah "Mobil" dan "Truk".
sumber
Jawaban Cepat: Antarmuka lebih tentang penambahan SET kemampuan, fitur, batasan umum atau interkoneksi antara entitas, kelas, model, konsep, dll.
Hal tentang menambahkan perilaku umum ke kelas dan entitas, dan kemudian nama bermakna yang baik akan muncul untuk mengidentifikasi set fitur yang sebenarnya.
Penamaan Antarmuka seperti:
IStateMachineBuilder, IUserContextProviderBuilder, IEntityBuilderBuilder, IActiveAware, etc.
mungkin menjelaskan konsepnya.sumber
IStateMachineBuilder
(kata benda),IBuildStateMachine
(dinamai menurut suatu tindakan),ICanBuildStateMachine
(dinamai menurut kemampuan), dll.Itu tergantung, jika antarmuka hanya berisi metode itu akan baik untuk nama itu menggunakan kata kerja seperti "Actions" di mana seolah-olah itu mewakili kelas generik yang berisi statis, bidang terakhir maka kita dapat menggunakan kata benda generik seperti "Kendaraan"
sumber