7 Stimmen

Java Web Projektstruktur Best Practice

Ich beginne ein neues Java-Webprojekt, das Hibernate und eine Standard-MVC-Architektur verwendet. Ich habe gerade damit begonnen, die Projektstruktur zu entwerfen, und dabei habe ich mich umgesehen, ob es irgendwelche Standards in diesem Bereich gibt, wo die Controller hingehören und wie man alles am besten anordnet. Ich habe jedoch nicht wirklich irgendwelche Richtlinien gefunden.

Was ich also gerne wissen möchte, ist

  • Kennt jemand einen Best-Practice-Leitfaden für das Layout eines Java-Webprojekts?
  • Hat jemand bestimmte feste Regeln, die er für verschiedene Projekttypen immer befolgt?
  • Neigen die Leute dazu, Pakete nach den verschiedenen Schichten wie Präsentation, Geschäft und Anwendung aufzuteilen?

7voto

kazanaki Punkte 7844

Das hängt wirklich von Ihrem Web-Framework ab.

Wenn Sie z. B. Wicket verwenden, befinden sich Java-Dateien und Webseiten im selben Verzeichnis, während in den meisten anderen Frameworks, Seiten (.jsp Dateien oder was auch immer Ihre Präsentations-Engine ist) und Code-Behind-Zeug (Java-Dateien) völlig getrennt sind.

Lesen Sie also die Dokumentation zu Ihrem Framework (Spring MVC, Struts, JSF usw.).

Ein weiterer guter Vorschlag ist die Verwendung von Maven Archetypes, um ein Skelett für Ihr spezifisches Framework zu erstellen. Einige Web-Frameworks (wie z. B. Seam) verfügen sogar über ein eigenes Tool zur Codegenerierung, das die Grundlage für Ihr Webprojekt bildet.

Mein einziger guter Vorschlag (der von Yoni nicht erwähnt wird) für das src-Verzeichnis ist Pakete nach dem Geschäftszweck und NICHT nach Typ/Schicht zu erstellen

Das bedeutet Pakete für

  • com.mycompany.myproject.customers
  • com.mycompany.myproject.departments
  • com.mycompany.myproject.billing
  • com.mycompany.myproject.reports
  • com.mycompany.myproject.admin

und NICHT

  • com.mycompany.myproject.entities
  • com.mycompany.myproject.tables
  • com.mycompany.myproject.graphs
  • com.mycompany.myproject.dialogs
  • com.mycompany.myproject.servlets

Die zweite Struktur ist zu allgemein, neigt dazu, große Pakete mit unzusammenhängendem Material aufzulösen und ist schwer zu pflegen.

3voto

Yoni Punkte 9949

Um meine vorherige Antwort fortzusetzen: Ich habe viele Webprojekte. In allen von ihnen ist die Struktur unter src mehr oder weniger gleich. Die Pakete sind grob in 3 logische Ebenen unterteilt.

Die erste ist die Präsentationsschicht, wie Sie sagten, für Servlets, App-Listener und Helfer.

Zweitens gibt es eine Schicht für die Hibernate-Modell-/Datenbankzugriffsschicht. Die dritte Schicht für die Geschäftslogik. Manchmal ist die Grenze zwischen diesen Schichten jedoch nicht klar. Wenn Sie Hibernate für den Datenbankzugriff verwenden, wird das Modell durch Hibernate-Klassen definiert, die ich in denselben Bereich wie die Dao-Objekte einfüge. Z.B. enthält com.sample.model die Hibernate-Datenobjekte und com.sample.model.dao die Dao-Objekte.

Wenn Sie gerade jdbc (in der Regel mit Spring), dann manchmal finde ich es bequemer, die Datenobjekte näher an die Business-Logik-Schicht als mit der db-Zugriffsschicht zu setzen.

(Der Rest des Materials fällt in der Regel unter die Geschäftsschicht).

2voto

Yoni Punkte 9949

Erstens, die konventionelle Struktur einer beliebten Ide zu folgen, ala Eclipse, Netbeans, etc. In Eclipse beispielsweise ist alles bereits mit einem WEB-INF- und einem META-INF-Ordner geordnet, so dass die Paketierung und Bereitstellung einfach ist. Der Quellcode der Klassen (normalerweise unter src) wird automatisch nach WEB-INF/classes kopiert. Es gibt noch ein paar andere Überlegungen:

  1. Wenn Sie MVC verwenden, ist es möglich, dass Sie nicht direkt auf Ihre JSPs zugreifen müssen. In diesem Fall sollten Sie den JSP-Quellcode aus Sicherheitsgründen unter WEB-INF/jsp aufbewahren.
  2. Ähnlich verhält es sich mit den benutzerdefinierten Tag-Dateien unter WEB-INF/tags.
  3. Behalten Sie die Javascript-Dateien im js-Ordner, die css-Dateien im style-Ordner, usw. Alle Ordner sollten sich auf der gleichen Ebene wie WEB-INF befinden, um einen echten Einsatz nachzuahmen.
  4. Es ist gut, den Code in Pakete nach Schichten aufzuteilen. Natürlich müssen Ihre Hibernate-Daos nicht im selben Paket sein wie Ihre Servlets.
  5. Wenn Sie zu viele Servlets in einem Paket haben, können Sie sie nach Funktionalität unterteilen, aber es ist gut, dass sie ein gemeinsames Vorgängerpaket haben - das hilft bei der Lesbarkeit.

2voto

Chetan Punkte 1562

1voto

Leif Gruenwoldt Punkte 13033

を使用します。 Maven Webapp Archetyp Layout.

project
|-- pom.xml
`-- src
    `-- main
        |-- java
        `-- webapp
            |-- WEB-INF
            |   `-- web.xml
            `-- index.jsp

Ich habe die java Ordner im Beispiel hier, vielleicht war es offensichtlich, aber es war in der oben genannten Link aus irgendeinem Grund ausgelassen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X