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.?

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,


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ć.

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


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.


"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

3

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

  • Nazwa Projektu
    • src
    • kosz
    • testy
    • libs
    • dokumenty

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.