Saya memikirkan hal ini beberapa waktu yang lalu dan baru-baru ini muncul kembali karena toko saya sedang melakukan aplikasi web Java pertama yang sebenarnya.
Sebagai intro, saya melihat dua strategi penamaan paket utama. (Untuk lebih jelasnya, saya tidak mengacu pada keseluruhan bagian 'domain.company.project' ini, saya berbicara tentang konvensi paket di bawahnya.) Bagaimanapun, konvensi penamaan paket yang saya lihat adalah sebagai berikut:
Fungsional: Memberi nama paket Anda menurut fungsinya secara arsitektural daripada identitasnya menurut domain bisnis. Istilah lain untuk ini mungkin penamaan menurut 'lapisan'. Jadi, Anda akan memiliki paket * .ui dan paket * .domain dan paket * .orm. Paket Anda adalah potongan horizontal, bukan vertikal.
Ini jauh lebih umum daripada penamaan logis. Sebenarnya, saya tidak percaya saya pernah melihat atau mendengar proyek yang melakukan ini. Ini tentu saja membuat saya curiga (seperti berpikir bahwa Anda telah menemukan solusi untuk masalah NP) karena saya tidak terlalu pintar dan saya berasumsi bahwa setiap orang pasti memiliki alasan yang bagus untuk melakukannya dengan cara yang mereka lakukan. Di sisi lain, saya tidak menentang orang yang hanya merindukan gajah di kamar dan saya tidak pernah mendengar argumen sebenarnya untuk melakukan penamaan paket dengan cara ini. Ini sepertinya menjadi standar de facto.
Logis: Memberi nama paket Anda sesuai dengan identitas domain bisnis mereka dan memasukkan setiap kelas yang berkaitan dengan fungsionalitas vertikal ke dalam paket itu.
Saya belum pernah melihat atau mendengar ini, seperti yang saya sebutkan sebelumnya, tetapi itu sangat masuk akal bagi saya.
Saya cenderung mendekati sistem secara vertikal daripada horizontal. Saya ingin masuk dan mengembangkan sistem Pemrosesan Pesanan, bukan lapisan akses data. Jelas, ada kemungkinan besar saya akan menyentuh lapisan akses data dalam pengembangan sistem itu, tetapi intinya adalah saya tidak menganggapnya seperti itu. Artinya, tentu saja, adalah ketika saya menerima perintah perubahan atau ingin menerapkan beberapa fitur baru, alangkah baiknya jika tidak perlu mencari-cari di sekumpulan paket untuk menemukan semua kelas terkait. Sebaliknya, saya hanya melihat paket X karena apa yang saya lakukan berkaitan dengan X.
Dari sudut pandang pengembangan, saya melihatnya sebagai kemenangan besar memiliki paket Anda mendokumentasikan domain bisnis Anda daripada arsitektur Anda. Saya merasa domain hampir selalu menjadi bagian dari sistem yang lebih sulit untuk dikuasai dimana arsitektur sistem, terutama pada titik ini, hampir menjadi biasa dalam implementasinya. Fakta bahwa saya bisa datang ke sistem dengan jenis konvensi penamaan ini dan langsung dari penamaan paket tahu bahwa itu berkaitan dengan pesanan, pelanggan, perusahaan, produk, dll tampaknya sangat berguna.
Sepertinya ini akan memungkinkan Anda untuk lebih memanfaatkan pengubah akses Java. Hal ini memungkinkan Anda untuk mendefinisikan antarmuka ke dalam subsistem dengan lebih jelas daripada ke dalam lapisan sistem. Jadi jika Anda memiliki subsistem pesanan yang ingin Anda persisten secara transparan, secara teori Anda tidak boleh membiarkan hal lain tahu bahwa itu persisten dengan tidak harus membuat antarmuka publik ke kelas persistensi di lapisan dao dan sebagai gantinya mengemas kelas dao di dengan hanya kelas-kelas yang ditangani. Jelas, jika Anda ingin mengekspos fungsionalitas ini, Anda dapat menyediakan antarmuka untuk itu atau membuatnya menjadi publik. Sepertinya Anda kehilangan banyak ini dengan memiliki potongan vertikal fitur sistem Anda yang dibagi menjadi beberapa paket.
Saya kira satu kelemahan yang dapat saya lihat adalah hal itu membuat merobek lapisan sedikit lebih sulit. Alih-alih hanya menghapus atau mengganti nama sebuah paket dan kemudian menjatuhkan yang baru dengan teknologi alternatif, Anda harus masuk dan mengubah semua kelas di semua paket. Namun, saya tidak melihat ini masalah besar. Mungkin karena kurangnya pengalaman, tetapi saya harus membayangkan bahwa berapa kali Anda menukar teknologi tidak ada artinya dibandingkan dengan berapa kali Anda masuk dan mengedit potongan fitur vertikal dalam sistem Anda.
Jadi saya kira pertanyaannya akan keluar kepada Anda, bagaimana Anda memberi nama paket Anda dan mengapa? Harap dipahami bahwa saya tidak selalu berpikir bahwa saya telah tersandung pada angsa emas atau sesuatu di sini. Saya cukup baru dalam semua ini dengan sebagian besar pengalaman akademis. Namun, saya tidak bisa menemukan lubang dalam alasan saya jadi saya berharap Anda semua bisa sehingga saya bisa melanjutkan.