Java projesi için paket yapısı?


116

Bir Java Web Uygulamasında paket yapıları kurmak için en iyi uygulama nedir?

Src, birim test kodunuzu vb. Nasıl kurarsınız?

Yanıtlar:


95

Maven'in standart proje düzenini takip edebilirsiniz . Aslında maven kullanmak zorunda değilsiniz, ancak gelecekte geçişi kolaylaştıracaktır (gerekirse). Ayrıca, birçok açık kaynak projesi bu şekilde düzenlendiği için diğer geliştiriciler bu düzeni görmeye alışacaklar.


2
Bir seçeneğiniz varsa Maven'in düzenini de kullanmanızı tavsiye ederim. Savaşta test edilmiş ve birçok geliştiriciye aşina olan iyi düşünülmüş bir yapıdır.
Dov Wasserman

15
Dizin düzenini oluşturmak için bu oneliner'ı kullanabilirsiniz: mkdir -p src / {main / {java, kaynaklar, filtreler, derleme, config, webapp}, test / {java, kaynaklar, filtreler}, site}
Daniel Hepper

1
Maven'in standart proje düzeni çirkin ...: /
Yousha Aleayoub

2
@YoushaAleayoub, onunla evlenmek zorunda değilsin
Ashvin Sharma

59

Kontrol edebileceğiniz birkaç mevcut kaynak vardır:

  1. Java Sınıflarınızı Doğru Şekilde Paketleyin
  2. Bahar 2.5 Mimarisi
  3. Java Eğitimi - Bir Paketi Adlandırma
  4. SUN Adlandırma Kuralları

Ne olursa olsun, kullanmaya eğilimli olduğum kendi kişisel yönergelerim aşağıdaki gibidir:

  1. Ters etki alanıyla başlayın, örneğin "com.mycompany".
  2. Ürün adını kullanın, örneğin "myproduct". Bazı durumlarda, belirli bir ürüne ait olmayan ortak paketlere sahip olma eğilimindeyim. Bunlar, bu ortak sınıfların işlevselliğine göre kategorilere ayrılır, örneğin "io", "util", "ui", vb.
  3. Bundan sonra daha serbest biçimli hale gelir. Genellikle proje, işlevsellik alanı, dağıtım vb. Göre gruplandırırım. Örneğin "proje1", "proje2", "ui", "istemci" vb. Olabilir.

Birkaç başka nokta:

  1. Paket adlarının tasarım belgelerinden akması için üzerinde çalıştığım projelerde oldukça yaygındır. Genellikle ürünler, zaten işlevsellik veya amaç alanlarına ayrılır.
  2. Ortak işlevselliği hemen daha yüksek paketlere itmek konusunda çok fazla strese girmeyin. Projeler, ürünler vb. Arasında bir ihtiyaç olmasını bekleyin ve ardından yeniden düzenleyin.
  3. Paketler arası bağımlılıkları izleyin. Hepsi kötü değil, ancak ayrı birimler arasında sıkı bir bağlantı olduğunu gösterebilir. Bunu takip etmenize yardımcı olabilecek araçlar var.

2
Ters etki alanı durumunda ("com.mycompany"), "com" paketi "şirketim" alt paketi dışında genellikle boş mu?
Alex Parker

45

Paket yapınızı uygulama katmanına göre değil, özelliğe göre oluşturmanızı öneririm. Bunun hakkında iyi bir yazı Java uygulamalarıdır: Özelliğe göre paketleyin, katmana değil


2
Teşekkürler. Düşüncelerimi takıma iletmek için aradığım şey buydu
Pranalee

8
Veritabanlarını değiştirmek isterseniz? Sadece 30 farklı pakete bakmanız gerekiyor. SFTP'den web hizmetlerine geçilsin mi? Yine sadece 30 farklı yere bakmanız gerekiyor. Kesinlikle hayran değil.
SamuelKDavis

1
katmana göre paketlemenin faydaları olduğu başka bir örnek: Eğer sınıfları JSON'a (örneğin gson ile) serileştirirseniz, bu sınıflar gizlenmişse (örneğin Proguard tarafından) (de) serileştirme başarısız olur; Proguard'ı bu tür sınıflara dokunmayacak şekilde yapılandırmanız gerekir - tümüyle tek bir paket belirtmek en kolayıdır
jmuet

6

Genelde şunlara sahip olmak isterim:

  • bin (Binaries)
  • doc (Belgeler)
  • inf (Bilgi)
  • lib (Kitaplıklar)
  • res (Kaynaklar)
  • src (Kaynak)
  • tst (Test)

Bunlar alışılmadık olarak kabul edilebilir, ancak bunu organize etmenin çok güzel bir yolu olduğunu düşünüyorum.


"Bunlar alışılmadık kabul edilebilir" Aslında alışılmadık ve bu arada
kötüler

2
@mahieddine Neden onları kötü buluyorsunuz?
Thomas Johannesmeyer

Bunu söyleyen ben değildim, ama işte düşüncelerimden bazıları: Test sınıflarınız kaynak kodudur, bu nedenle "tst" dizini (çoğu kişi test btw'yi kısaltmaz) src'nin bir alt dizini olmalıdır (ör. " src "," src / main "ve" tst "," src / test "olur). Ayrıca "inf", "doc" da olabilecek içeriği içeriyor gibi görünüyor.
Nico Wawrzyniak

6
The way I usually organise is
- src
        - main
                - java
                - groovy
                - resources
        - test
                - java
                - groovy
- lib
- build
        - test 
                - reports
                - classes
- doc

3

Genelde klasör hiyerarşimi kullanma şeklim ...

  • proje Adı
    • src
    • çöp Kutusu
    • testler
    • libs
    • docs

1

Bir başka yol da API'leri, hizmetleri ve varlıkları farklı paketlere ayırmaktır.

görüntü açıklamasını buraya girin

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.