Struktur paket untuk proyek Java?

116

Apa praktik terbaik untuk menyiapkan struktur paket di Aplikasi Web Java?

Bagaimana Anda menyiapkan src, kode pengujian unit, dll?

mawaldne.dll
sumber

Jawaban:

95

Anda bisa mengikuti tata letak proyek standar maven . Anda tidak harus benar-benar menggunakan maven, tetapi ini akan membuat transisi lebih mudah di masa depan (jika perlu). Selain itu, pengembang lain akan terbiasa melihat tata letak itu, karena banyak proyek sumber terbuka yang ditata dengan cara ini,

johnstok
sumber
2
Saya juga merekomendasikan menggunakan tata letak Maven jika Anda punya pilihan. Ini adalah struktur yang dipikirkan dengan matang yang telah diuji dalam pertempuran, dan akrab bagi banyak pengembang.
Dov Wasserman
15
Anda dapat menggunakan oneliner ini untuk membuat tata letak direktori: mkdir -p src / {main / {java, resources, filter, assembly, config, webapp}, test / {java, resources, filters}, site}
Daniel Hepper
1
Tata letak proyek standar Maven jelek ...: /
Yousha Aleayoub
2
@YoushaAleayoub Anda tidak harus menikah
Ashvin Sharma
59

Ada beberapa sumber daya yang bisa Anda periksa:

  1. Kemas Kelas Java Anda dengan Benar
  2. Arsitektur Spring 2.5
  3. Tutorial Java - Memberi Nama Paket
  4. Konvensi Penamaan SUN

Untuk apa nilainya, pedoman pribadi saya sendiri yang cenderung saya gunakan adalah sebagai berikut:

  1. Mulailah dengan domain terbalik, misalnya "com.mycompany".
  2. Gunakan nama produk, misalnya "myproduct". Dalam beberapa kasus, saya cenderung memiliki paket umum yang bukan milik produk tertentu. Ini akan dikategorikan berdasarkan fungsionalitas dari kelas umum ini, misalnya "io", "util", "ui", dll.
  3. Setelah ini, bentuk menjadi lebih bebas. Biasanya saya mengelompokkan menurut proyek, area fungsionalitas, penerapan, dll. Misalnya, saya mungkin memiliki "project1", "project2", "ui", "client", dll.

Beberapa poin lainnya:

  1. Ini cukup umum dalam proyek yang saya kerjakan agar nama paket mengalir dari dokumentasi desain. Biasanya produk sudah dipisahkan menjadi area fungsionalitas atau tujuan.
  2. Jangan terlalu menekankan tentang mendorong fungsionalitas umum ke paket yang lebih tinggi segera. Tunggu sampai ada kebutuhan di seluruh proyek, produk, dll., Lalu lakukan refaktorisasi.
  3. Perhatikan ketergantungan antar paket. Mereka tidak semuanya buruk, tapi itu bisa menandakan hubungan erat antara unit yang mungkin terpisah. Ada alat yang dapat membantu Anda melacak ini.
lycono
sumber
2
Dalam kasus domain terbalik ("com.mycompany"), apakah paket "com" biasanya kosong kecuali untuk sub-paket "perusahaanku"?
Alex Parker
45

Saya akan menyarankan untuk membuat struktur paket Anda berdasarkan fitur, dan bukan dengan lapisan implementasi. Tulisan yang baik tentang ini adalah praktik Java: Paket menurut fitur, bukan lapisan

analis data
sumber
2
Terima kasih. Inilah yang saya cari untuk menyampaikan pemikiran saya kepada tim
Pranalee
8
Dan jika Anda ingin berpindah database? Hanya perlu mencari di 30 paket berbeda. Pindah dari SFTP ke layanan web? Sekali lagi hanya perlu mencari di 30 tempat berbeda. Jelas bukan penggemar.
SamuelKDavis
1
contoh lain di mana pengemasan menurut lapisan memiliki keuntungan: jika Anda membuat serialisasi kelas ke JSON (misalnya dengan gson), jika kelas tersebut dikaburkan (misalnya oleh Proguard) (de) serialisasi akan gagal; Anda perlu mengkonfigurasi Proguard agar tidak menyentuh kelas-kelas seperti itu - yang paling mudah adalah menentukan satu paket dengan semuanya
jmuet
6

Saya biasanya suka memiliki yang berikut ini:

  • bin (Binari)
  • doc (Dokumen)
  • inf (Informasi)
  • lib (Perpustakaan)
  • res (Sumber Daya)
  • src (Sumber)
  • tst (Tes)

Ini mungkin dianggap tidak konvensional, tetapi menurut saya ini cara yang sangat bagus untuk mengatur berbagai hal.


sumber
"Ini mungkin dianggap tidak konvensional" Mereka sebenarnya tidak konvensional dan buruk dengan cara ...
mahieddine
2
@mahieddine Mengapa Anda menganggapnya buruk?
Thomas Johannesmeyer
Bukan saya yang menyatakan itu, tapi berikut beberapa pemikiran saya: Kelas tes Anda adalah kode sumber jadi direktori "tst" (kebanyakan orang tidak menyingkat test btw) harus menjadi sub direktori dari src (mis. " src "menjadi" src / main "dan" tst "menjadi" src / test "). Juga "inf" sepertinya menyertakan konten yang bisa jadi "doc".
Nico Wawrzyniak
6
The way I usually organise is
- src
        - main
                - java
                - groovy
                - resources
        - test
                - java
                - groovy
- lib
- build
        - test 
                - reports
                - classes
- doc
Raj
sumber
3

Cara saya biasanya memiliki hierarki folder-

  • Nama Proyek
    • src
    • tempat sampah
    • tes
    • libs
    • docs
pdeva
sumber
1

Cara lainnya adalah dengan memisahkan API, layanan, dan entitas ke dalam paket yang berbeda.

masukkan deskripsi gambar di sini

Deepak Patankar
sumber