Apakah nama paket harus tunggal atau jamak?

227

Seringkali, di perpustakaan khususnya, paket berisi kelas-kelas yang disusun berdasarkan konsep tunggal. Contoh: xml, sql, pengguna, konfigurasi, db . Saya pikir kita semua merasa cukup alami bahwa paket-paket ini benar dalam bentuk tunggal .

com.myproject. xml .Element
com.myproject. sql .Connection
com.myproject. pengguna. Pengguna
com.myproject. pengguna .UserFactory

Namun, jika saya memiliki paket yang benar-benar berisi kumpulan implementasi dari satu jenis - seperti tugas, aturan, penangan, model, dll. , Mana yang lebih disukai?

com.myproject. tugas .TakeOutGarbageTask
com.myproject. tugas .DoTheDishesTask
com.myproject. tugas. PaintTheHouseTask

atau

com.myproject. tugas .TakeOutGarbageTask
com.myproject. tugas .DoTheDishesTask
com.myproject. tugas .PaintTheHouseTask

Nicole
sumber
5
tunggal seperti nama tabel database harus selalu tunggal tetapi karena alasan berbeda. Lihatlah perpustakaan standar populer seperti Java atau Python misalnya.
@Jarrod Roberson: Silakan kirim jawaban Anda sebagai jawaban agar kami dapat meningkatkannya dengan benar.
S.Lott
@Jarrod akan membutuhkan beberapa contoh, karena di perpustakaan standar sebagian besar kelas termasuk dalam kategori pertama yang saya daftarkan.
Nicole
@Renesis Lihatlah jawaban saya yang diperbarui.
Matius Rodatus
@ Matius - Saya suka itu. Anda telah mengungkapkan apa yang saya duga tetapi tidak yakin bagaimana cara menyusunnya.
Nicole

Jawaban:

293

Gunakan bentuk jamak untuk paket dengan konten homogen dan tunggal untuk paket dengan konten heterogen.

Kelas mirip dengan relasi basis data. Relasi basis data harus dinamai dalam singular karena rekamannya dianggap sebagai instance relasi. Fungsi relasi adalah untuk menyusun catatan yang kompleks dari data sederhana.

Paket, di sisi lain, bukan abstraksi data. Ini membantu dengan pengaturan kode dan resolusi konflik penamaan. Jika sebuah paket dinamai dalam singular, itu tidak berarti bahwa setiap anggota paket adalah turunan dari paket tersebut; itu mengandung konsep-konsep yang terkait tetapi heterogen. Jika ini dinamai dalam bentuk jamak (seperti yang sering terjadi ), saya akan berharap bahwa paket berisi konsep-konsep yang homogen.

Sebagai contoh, suatu jenis harus dinamai TaskCollectionbukan TasksCollection, karena itu adalah kumpulan yang berisi instance dari a Task. Paket bernama com.myproject.tasktidak berarti bahwa setiap kelas yang ada adalah turunan dari tugas. Mungkin ada TaskHandler, seorang TaskFactory, dll paket bernama com.myproject.tasks, bagaimanapun, akan berisi berbagai jenis yang semua tugas: TakeOutGarbageTask, DoTheDishesTask, dll

Matthew Rodatus
sumber
13
Untuk pertanyaan serupa, lihat english.stackexchange.com/q/25713 . Sebuah kategori analog dengan bentuk tunggal dan tipe analog dengan jamak.
Matius Rodatus
4
Sangat link yang Anda berikan menunjukkan pengecualian untuk aturan ini. beansjamak, namun java.beansberisi semua jenis kelas yang terkait dengan JavaBeans.
SkyDan
Jawaban yang bagus, tapi saya tidak setuju dengan logika relasi basis data. Hubungan dalam ERD adalah singular karena mereka menunjukkan hubungan antar entitas. Tabel adalah implementasi fisik dari relasi, dan mereka memiliki banyak baris, dan karenanya harus IMO jamak. Jawaban untuk "apa yang ada di tabel ini?" adalah "pengguna" bukan "pengguna". Memang, tampaknya penamaan tunggal lebih umum di dunia perusahaan (C #, Jawa) daripada di komunitas seperti Ruby, Python, Javascript, dan PHP.
ryeguy
4
Komentar @ SkyDan menunjukkan sesuatu yang sangat penting yang sepenuhnya diabaikan di sini. Tampak bagi saya bahwa penamaan jamak dari "java.beans" sebenarnya merupakan kesalahan, dan seharusnya itu dinamai "java.bean", tunggal.
Vicky Chijwani
6
@VickyChijwani @SkyDan karena JavaBeans ™ adalah merek dagang, mereka mungkin ingin mempertahankan namanya apa adanya untuk merujuk pada teknologi itu sendiri, dan karenanya mereka menggunakannya java.beans.
Hejazi
1

Ini mungkin tergantung pada bahasa tertentu. Dalam .NET (C #) itu pasti harus jamak jika kemungkinan tabrakan nama-jenis namespace ( type name expected but namespace foundkesalahan). Saya sudah membahas hal ini, itu tidak menyenangkan dan menghasilkan nama tipe yang terlalu memenuhi syarat di seluruh kode. Contoh .

Sarang
sumber