Bagaimana cara menangani Kelas yang memiliki nama yang sama (paket berbeda)

9

Saya dan tim R&D saya memelihara basis kode yang besar. Kami telah membagi logika bisnis kami menjadi beberapa paket. beberapa di antaranya memiliki kelas dengan nama yang identik .

Seperti yang bisa Anda tebak, nama konflik ketika kedua kelas direferensikan dalam file Java yang sama.


Sebagai contoh:

com.myapp.model (package)
 - Device (class)
 - ...

com.myapp.data (package)
 - Device (class)
 - ...

Kami berdebat tentang apa praktik terbaik untuk menangani kasus-kasus ini dan opsi berikut muncul:

Opsi 1

  • Mengganti nama kelas, menambahkan awalan

    ModelDevice
    DataDevice

Opsi 2

  • Menggunakan paket lengkap + nama kelas saat keduanya direferensikan

    com.myapp.model.Device
    com.myapp.data.Device

Apa yang lebih benar dalam hal manajemen kode dan skalabilitas?

saat ini kami sedang menggabungkan kedua pendekatan dan mulai memiliki ketidakkonsistenan

Jossef Harush
sumber
Jika sesekali mungkin tidak masalah - jika ini adalah pola yang berulang, saya mungkin akan memberi nama kelas yang lebih tepat untuk mencegahnya menjadi berantakan.
assylias
Anda tidak tahu berapa banyak yang saya benci java.util.Datedan java.sql.Date- terutama karena java.sql.Datemerupakan subkelas dari java.util.Datedan begitu baik menyelinap keluar dari lapisan data (dan tidak bersambung dengan baik ke JSON).
Opsi 2.1 Selalu menggunakan nama yang sepenuhnya memenuhi syarat, bahkan jika yang lain tidak dirujuk
Caleth

Jawaban:

18

Gunakan nama paket. Jenis masalah ini justru mengapa Java menggunakan konvensi penamaan paket yang dilakukannya. Ini mencegah masalah semacam ini, apakah itu dua tim di perusahaan yang sama atau dua tim di sisi bumi yang berlawanan.

Bryan Oakley
sumber
1

Sampai sekarang Anda memiliki satu kelas ModelDevice (Perangkat dalam paket model). Bagaimana jika Anda memiliki ModelDevice lain untuk klasifikasi yang berbeda? Masalahnya mungkin masih berlanjut dan overhead juga akan terus meningkat.

Meskipun untuk saat ini Anda mungkin menemukan bahwa mengganti nama kelas sangat membantu, untuk jangka panjang alternatif yang disarankan adalah dengan mengawali nama paket, yang merupakan Standar Industri.

ituraghz
sumber
0

Untuk menambahkan satu aspek yang belum disebutkan:

Lihatlah pola penggunaannya, yaitu sumber Java yang mereferensikan satu atau kedua kelas.

IMHO, dalam sebagian besar kasus, file sumber harus merujuk hanya satu dari kelas yang saling bertentangan, dan dari konteksnya harus jelas apakah mereka berurusan dengan model atau dunia data. Jika itu sulit karena alasan apa pun, saya akan mengganti nama kelas, karena saya biasanya tidak suka nama kelas yang diawali dengan paket dalam kode sumber (itu menurunkan keterbacaan).

Jika Anda memiliki file sumber yang berhubungan dengan kedua dunia, mereka mungkin menjembatani kelas dengan resonansi untuk menerjemahkan antara dua pandangan dunia yang berbeda, dan di sini saya lebih suka menemukan nama kelas yang diawali dengan paket.

Tetapi melihat kedua kelas Perangkat dalam satu sumber mungkin juga menjadi petunjuk bahwa sumber tersebut melanggar prinsip tanggung jawab tunggal dengan menggabungkan tugas-tugas dari model dan dunia data.

Ralf Kleberhoff
sumber