2012-05-14 29 views
6

Tôi đang phát triển một dự án web và sau nhiều nghiên cứu, tôi đã quyết định tiếp tục với JSF + Primefaces, Spring và Hibernate. Trong khi thiết kế kiến ​​trúc của dự án của tôi, tôi đã hoàn thành các phương pháp sau đây:JSF-SPRING-HIBERNATE architecture-Backing bean liên quan đến thực hành tốt nhất

diễn viên -> JSF + PrimeFaces trang ---> Sao Bean -> Dịch vụ Bean -> Dao -> Hibernate

  • Dịch vụ Đậu và DAO là đậu mùa xuân có tiêm phụ thuộc.

Mối quan tâm của tôi bây giờ là liên quan đến việc sao lưu bean: Tôi định sử dụng nhiều bean sao lưu cho trang Giao diện người dùng tùy thuộc vào loại Trang tôi cần hiển thị.

Ví dụ: Đối với trang đăng ký người dùng mới, tôi có UserProfile.xhtml sử dụng UserBackingBean. UserBackingBean có UserServiceBean được tiêm vào mùa xuân. UserServiceBean có UserDao được tiêm bởi Spring.

Bây giờ trong UserBackingBean khi người dùng nhập dữ liệu biểu mẫu từ UserProfile.xhtml tôi sẽ phải điền đối tượng miền User.java (ORM).

a) Thực tiễn tốt nhất cho việc này là gì? Tôi có nên khởi tạo User.java trong hàm tạo trên UserBackingBean không? Đây có phải là cách tiếp cận thích hợp không? Xin đề nghị nếu có bất kỳ cách nào khác ra?

b) Cũng vui lòng đề xuất kiến ​​trúc trên mà tôi đã quyết định cho dự án của mình? Đó có phải là cách tiếp cận thích hợp không?

Trả lời

2

Nguyên tắc chung mà tôi tuân thủ là ranh giới giao dịch được đánh dấu trong hạt dịch vụ, do đó tôi không muốn sửa đổi POJO hibernate bên ngoài dịch vụ vì tôi không biết liệu có giao dịch nào đang chạy hay không. Vì vậy, từ đậu ủng hộ, tôi sẽ gọi các lớp dịch vụ vượt qua trong các thông số mà các lớp dịch vụ cần phải xây dựng các hibernate pojo và lưu nó, cập nhật nó, ... vn ..

Một cách khác để làm điều này sẽ có bean sao lưu của bạn thực hiện một giao diện được xác định bởi lớp dịch vụ và sau đó chuyển bean sao lưu vào lớp dịch vụ. Ví dụ.

public interface UserInfoRequest { 
    public String getName(); 
} 


@Service 
public class SomeSpringService { 

    @Transactional(.....) 
    public void registerNewUser(UserInfoRequest request) 
    { 

    } 

} 

public class SomeBackingBean implements UserInfoRequest { 

    private SomeService someSpringService; 

    public void someMethodBoundToSJF() 
    { 
     this.someSpringService.registerNewUser(this); 
    } 
} 

Về câu hỏi cuối cùng của bạn Tôi không phải là người hâm mộ JSF, tôi nghĩ JSF về cơ bản là thiếu sót vì đó là khung dựa trên thành phần máy chủ. Vì vậy, đối số của tôi đối với JSF là một đối số chung đối với các khung công tác dựa trên thành phần phía máy chủ.

Lỗ hổng chính với khung dựa trên thành phần phía máy chủ là bạn không kiểm soát thành phần sẽ xuất ra có nghĩa là bạn bị mắc kẹt với giao diện của thành phần, nếu bạn muốn thứ gì đó trông khác thành phần hoặc bạn phải sửa đổi một thành phần hiện có. Trình duyệt web hiện đang phát triển rất nhanh chóng bổ sung các tính năng mới có thể thực sự cải thiện chất lượng của giao diện người dùng ứng dụng nhưng với bạn các tính năng đó bạn phải viết HTML, CSS và JavaScript trực tiếp và các thành phần phía máy chủ làm cho khó hơn.

Kiến trúc thành phần phía máy khách đang ở đây và tốt hơn nhiều so với thực hiện các thành phần ở phía máy chủ. Đây là đề nghị của tôi stack.

Khách hàng Kiến trúc Side:

  • jquery.js - THƯ VIỆN cơ bản để làm cho tất cả các trình duyệt đều giống nhau để Javascript
  • backbone.js + underscore.js - mức cao thành phần phía khách hàng dựa trên kiến ​​trúc
  • handlebars.js - cho các mẫu phía khách hàng
  • Twitter bootstrap - để được một khởi động phong nha bộ CSS & widget

Bạn viết mã trong HTML, CSS và JavaScript tổ chức như quan điểm xương sống mà nói chuyện với phía máy chủ mô hình sử dụng AJAX. Bạn có toàn quyền kiểm soát trải nghiệm người dùng phía khách hàng với đủ cấu trúc để thực sự tạo mã tái sử dụng tốt đẹp.

Server Side Kiến trúc:

  • Chú Driven Spring MVC, Dịch vụ và Đào (@Controller, @Service, @Repository)
  • mùa xuân thành phần quét với autowiring theo loại (@Autowired, @Inject)
  • AspectJ Tải Time Dệt hoặc Compile Time Dệt
  • Hibernate
  • Tomcat 7
  • JSP là công nghệ xem nology cho Spring MVC (có nó cluncuky nhưng bạn sẽ không được tạo quá nhiều trang jsp, chủ yếu là cho usng <% @inculde> chỉ thị

Tooling: - Xuân Tool bộ - JRebel (để bạn don' t phải bắt đầu và ngừng máy chủ) nó thực sự hoạt động thực sự đáng giá tiền - Tomcat 7

Các vấn đề liên quan