Struktura pakietu dla projektu Java?

116

Jakie są najlepsze praktyki dotyczące konfigurowania struktur pakietów w aplikacji internetowej Java?

Jak skonfigurowałbyś swój src, kod testu jednostkowego itp.?

mawaldne
źródło

Odpowiedzi:

95

Możesz naśladować standardowy układ projektu Mavena . Nie musisz faktycznie używać mavena, ale ułatwiłoby to przejście w przyszłości (w razie potrzeby). Ponadto inni programiści będą przyzwyczajeni do oglądania tego układu, ponieważ wiele projektów open source jest ułożonych w ten sposób,

johnstok
źródło
2
Polecam również korzystanie z układu Mavena, jeśli masz wybór. To przemyślana konstrukcja, która została przetestowana w walce i jest znana wielu programistom.
Dov Wasserman,
15
Możesz użyć tego onelinera do stworzenia układu katalogu: mkdir -p src / {main / {java, resources, filters, assembly, config, webapp}, test / {java, resources, filters}, site}
Daniel Hepper,
1
Standardowy układ projektu Mavena jest brzydki ...: /
Yousha Aleayoub
2
@YoushaAleayoub, nie musisz tego poślubiać
Ashvin Sharma
59

Istnieje kilka istniejących zasobów, które możesz sprawdzić:

  1. Prawidłowo spakuj swoje klasy Java
  2. Architektura wiosna 2.5
  3. Samouczek Java - nazywanie pakietu
  4. Konwencje nazewnictwa słońca

Jeśli chodzi o to, co jest warte, moje własne osobiste wytyczne, których zwykle używam, są następujące:

  1. Zacznij od domeny odwrotnej, np. „Com.mojafirma”.
  2. Użyj nazwy produktu, np. „Myproduct”. W niektórych przypadkach mam zwykle wspólne opakowania, które nie należą do określonego produktu. Zostałyby one podzielone na kategorie według funkcjonalności tych typowych klas, np. „Io”, „util”, „ui” itp.
  3. Po tym staje się bardziej swobodny. Zwykle grupuję według projektu, obszaru funkcjonalności, wdrożenia itp. Na przykład mogę mieć „projekt1”, „projekt2”, „ui”, „klient” itp.

Kilka innych punktów:

  1. W projektach, nad którymi pracowałem, dość często nazwy pakietów pochodzą z dokumentacji projektowej. Zwykle produkty są już podzielone na obszary funkcjonalności lub przeznaczenia.
  2. Nie stresuj się zbytnio umieszczaniem od razu wspólnych funkcji do wyższych pakietów. Poczekaj, aż pojawi się potrzeba w różnych projektach, produktach itp., A następnie dokonaj refaktoryzacji.
  3. Obserwuj zależności między pakietami. Nie wszystkie są złe, ale może to oznaczać ścisłe powiązanie między tym, co może być oddzielnymi jednostkami. Istnieją narzędzia, które pomogą Ci to śledzić.
lycono
źródło
2
Czy w przypadku domeny odwrotnej („com.mycompany”) pakiet „com” jest zwykle pusty, z wyjątkiem podpakietu „mycompany”?
Alex Parker
45

Sugerowałbym tworzenie struktury pakietu według funkcji, a nie warstwy implementacji. Dobry opis to praktyki Java: pakuj według funkcji, a nie warstwy

dataAnalyst
źródło
2
Dzięki. Właśnie tego szukałem, aby przekazać moje myśli zespołowi
Pranalee,
8
A jeśli chcesz zmienić bazy danych? Wystarczy spojrzeć w 30 różnych opakowaniach. Przenieść się z SFTP na usługi sieciowe? Znowu wystarczy spojrzeć w 30 różnych miejscach. Zdecydowanie nie jestem fanem.
SamuelKDavis
1
inny przykład, w którym pakowanie według warstwy ma zalety: jeśli serializujesz klasy do JSON (np. za pomocą gson), jeśli te klasy są zaciemniane (np. przez Proguard) (de) serializacja nie powiedzie się; musisz skonfigurować Proguarda, aby nie dotykał takich klas - najłatwiej jest po prostu określić pojedynczy pakiet ze wszystkimi
jmuet
6

Zwykle lubię mieć:

  • bin (pliki binarne)
  • doc (dokumenty)
  • inf (informacje)
  • lib (biblioteki)
  • res (zasoby)
  • src (źródło)
  • tst (test)

Można to uznać za niekonwencjonalne, ale uważam, że to bardzo fajny sposób na porządkowanie rzeczy.


źródło
"Te można uznać za niekonwencjonalne" W rzeczywistości są niekonwencjonalne i przy okazji są złe ...
mahieddine
2
@mahieddine Dlaczego uważasz je za złe?
Thomas Johannesmeyer
Cóż, to nie ja to powiedziałem, ale oto kilka moich przemyśleń: Twoje klasy testowe są kodem źródłowym, więc katalog "tst" (większość ludzi nie używa skrótów test btw) powinien być podkatalogiem src (np. " src ”staje się„ src / main ”, a„ tst ”staje się„ src / test ”). Wydaje się, że także „inf” zawiera treść, która może znajdować się w „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
źródło
3

Sposób, w jaki zwykle mam hierarchię folderów

  • Nazwa Projektu
    • src
    • kosz
    • testy
    • libs
    • dokumenty
pdeva
źródło
1

Innym sposobem jest rozdzielenie interfejsów API, usług i jednostek na różne pakiety.

wprowadź opis obrazu tutaj

Deepak Patankar
źródło