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
java
coding-style
coding-standards
naming
conventions
Jossef Harush
sumber
sumber
java.util.Date
danjava.sql.Date
- terutama karenajava.sql.Date
merupakan subkelas darijava.util.Date
dan begitu baik menyelinap keluar dari lapisan data (dan tidak bersambung dengan baik ke JSON).Jawaban:
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.
sumber
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.
sumber
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.
sumber