2009-01-31 18 views
7

Tôi đang bắt đầu một Dự án Web Java mới đang sử dụng Hibernate và một Kiến trúc MVC tiêu chuẩn. Tôi vừa bắt đầu bố trí cấu trúc dự án và trong khi làm điều này, tôi bắt đầu nhìn xung quanh để xem có bất kỳ tiêu chuẩn nào trong lĩnh vực này hay không, về nơi Bộ điều khiển nên đi và nói chung là cách tốt nhất để đặt mọi thứ ra. Tuy nhiên tôi chưa thực sự tìm thấy bất kỳ hướng dẫn nào.Cấu trúc Dự án Web Java Thực tiễn Tốt nhất

Vì vậy, những gì tôi tò mò muốn biết là

  • Có ai biết về bất kỳ hướng dẫn thực hành tốt nhất cho cách bố trí của một dự án Java Web?
  • Có ai có một bộ quy tắc cứng cụ thể mà họ luôn tuân thủ cho các loại dự án khác nhau không?
  • Mọi người có xu hướng phân chia các gói bởi các lớp khác nhau như thuyết trình, kinh doanh và ứng dụng không?

Trả lời

3

Để tiếp tục câu trả lời trước đây của tôi, tôi có nhiều dự án web. Trong tất cả chúng cấu trúc dưới src là nhiều hơn hoặc ít hơn như nhau. Các gói được chia tách thành 3 lớp logic.

Đầu tiên là lớp trình bày, như bạn đã nói, đối với các servlet, người nghe ứng dụng và người trợ giúp.

Thứ hai, có một lớp cho lớp truy cập mô hình/truy cập hibernate. Lớp thứ ba cho logic nghiệp vụ. Tuy nhiên, đôi khi ranh giới giữa các lớp này không rõ ràng. Nếu bạn đang sử dụng hibernate để truy cập db thì mô hình được định nghĩa bởi các lớp ngủ đông nên tôi đặt chúng trong cùng khu vực với các đối tượng dao. Ví dụ. com.sample.model chứa các đối tượng dữ liệu hibernate và com.sample.model.dao giữ các đối tượng dao.

Nếu sử dụng jdbc thẳng (thường với Spring), thì đôi khi tôi thấy thuận tiện hơn khi đặt các đối tượng dữ liệu gần lớp logic kinh doanh hơn là với lớp truy cập db.

(Phần còn lại của nội dung thường nằm trong lớp doanh nghiệp).

2

Đầu tiên, phải theo cấu trúc thông thường của ide phổ biến, ala Eclipse, Netbeans, v.v. Trong Eclipse, ví dụ, mọi thứ được sắp xếp với thư mục WEB-INF và META-INF, và triển khai thật dễ dàng. Lớp mã nguồn (thường dưới src) được tự động sao chép vào WEB-INF/classes. Có một số cân nhắc khác:

  1. Nếu bạn đang sử dụng MVC, có thể bạn không cần truy cập trực tiếp vào JSP của mình. Nếu vậy, hãy giữ mã nguồn JSP trong WEB-INF/jsp, vì lý do bảo mật.
  2. Tương tự, giữ các tệp thẻ tùy chỉnh trong WEB-INF/thẻ.
  3. Giữ các tệp javascript trong thư mục js, tệp css trong thư mục kiểu, v.v. Tất cả các thư mục phải ở cùng cấp với WEB-INF để bắt chước triển khai thực.
  4. Bạn nên tách mã của mình thành các gói theo các lớp. Rõ ràng là các bản sao Hibernate của bạn không cần phải ở cùng một gói với các servlet của bạn.
  5. Nếu bạn kết thúc với quá nhiều servlet trong cùng một gói, hãy xem xét việc đóng gói phụ phù hợp với chức năng, nhưng tốt nhất là chúng có một gói tổ tiên chung - nó giúp dễ đọc.
+0

Tôi thích WEB-INF/nội dung hoặc WEB-INF/chế độ xem, ai biết công nghệ trình bày hoặc có thể là gì ... –

+0

đúng, cảm ơn bạn đã chỉ ra điều đó. Miễn là chúng được lưu trữ dưới WEB-INF ... – Yoni

+0

Một số điểm tốt có Yoni. Tuy nhiên, tôi vẫn quan tâm đến ý kiến ​​của mọi người về cách cụ thể thư mục src nên được cấu trúc với các gói, hay các servlet được đặt trong một gói được gọi là bản trình bày vì chúng chủ yếu gọi nội dung JSP. –

6

Điều đó thực sự phụ thuộc vào khung web của bạn.

Ví dụ: nếu bạn sử dụng Wicket, tệp java và trang web cùng tồn tại trong cùng một thư mục trong khi trong hầu hết các khung công tác khác, trang (tệp .jsp hoặc bất kỳ công cụ trình bày nào của bạn) và .) hoàn toàn tách biệt.

Vì vậy hãy đọc tài liệu đi kèm với khung của bạn (Spring MVC, Struts, JSF e.t.c).

Một đề xuất tốt khác là sử dụng Maven Archetypes để tạo khung cho khung cụ thể của bạn. Một số khung công tác web (chẳng hạn như đường may) thậm chí có cả công cụ tạo mã riêng của chúng, đặt nền tảng cho dự án web của bạn.

chỉ gợi ý tốt của tôi (mà không được đề cập bởi Yoni) cho thư mục src là để làm cho gói theo mục đích kinh doanh và không theo kiểu/lớp

Điều đó có nghĩa các gói cho

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

và KHÔNG

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

Cấu trúc thứ hai quá chung chung, có xu hướng giải quyết xung quanh các gói lớn với những thứ không liên quan và khó duy trì.

+0

@kazanaki Thật không may trong dự án này tôi chỉ sử dụng đồng bằng MVC, không có khuôn khổ. Tôi đã có thư mục src của tôi được cấu trúc theo các quy tắc maven. Với bố trí gói của bạn, bạn gói phụ mà ở tất cả vào các lớp khác nhau hoặc chỉ cần đi sâu vào các mục đích phụ. –

+0

@Mark subpackages là các lớp. Đối với ví dụ tôi cung cấp cho khách hàng có các khách hàng, các khách hàng, các khách hàng.trung tâm e.t.c. Nhưng trong một subpackages dự án thực sự lớn có thể là mục đích phụ như bạn nói. Không có câu trả lời đúng ở IMHO – kazanaki

0

Sử dụng Maven webapp archetype layout.

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

Tôi đã bao gồm các thư mục java trong ví dụ ở đây, có lẽ đó là hiển nhiên, nhưng nó đã bị bỏ qua trong các liên kết ở trên cho một số lý do.