2010-08-02 44 views
6

Tôi thực sự đã thích một khung ứng dụng JBoss Seam. Vì khái niệm tiêm/đẩy và tích hợp chặt chẽ giữa JSF/EJBs/JPA tương đối khan hiếm trong các khung ứng dụng Java, tôi đang tìm kiếm một số tài nguyên tốt cho các mẫu thiết kế và thực tiễn tốt nhất để sử dụng khung này. Tôi đã đổ qua các ví dụ và một số cuốn sách về chủ đề này. Tuy nhiên, tôi quan tâm nhiều hơn đến các mẫu thiết kế thực tế so sánh với các mẫu thiết kế J2EE truyền thống. Ví dụ: DAO truyền thống so với EntityHome/EntityQuery. Logic kinh doanh nên được thực hiện ở đâu? Trong lớp học hành động? Hoặc trong các lớp dịch vụ chuyên dụng? Tôi thực sự đánh giá cao bất kỳ sự hiểu biết sâu sắc nào mà các nhà phát triển Seam có thể cung cấp. Cảm ơn!Các mẫu thiết kế JBoss Seam?

Trả lời

8

Có rất nhiều mẫu hữu ích mà bạn có thể sử dụng.

cách tiếp cận truyền thống

view >> controller >> service >> domain 

Mà có thể được dịch sang

/** 
    * view 
    */ 
<h:commandButton value="Deposit" action="#{accountController.removeAccount(account)}"/> 

/** 
    * controller 
    */ 
@Name("accountController") 
public class AccountController implements Serializable { 

    /** 
     * Usually a plain POJO or EJB 
     */ 
    private @In AccountService accountService; 

    public void removeAccount(Account account) { 
     accountService.removeAccount(account); 
    } 

} 

/** 
    * service 
    */ 
@Name("accountService") 
public class AccountServiceImpl implements AccountService { 

    private @In EntityManager entityManager; 

    public void removeAccount(Account account) { 
     entityManager.remove(account); 
    } 

} 

Nếu bạn có một số hành động mà cần Để thao tác các thành phần JSF trên server-side, sử dụng một bộ điều khiển như trình bày ở trên có thể là một ý tưởng tốt đẹp

Bạn cũng có thể sử dụng

view >> service >> domain 

Nó là cơ bản Các phương pháp tương tự hiển thị ở trên nhưng không có điều khiển

hoặc sử dụng built-in mẫu hòa giải bằng cách sử dụng EntityHome/EntityQuery

view >> domain 

đăng ký EntityHome của bạn như sau /WEB -INF/components.xml

<framework:entity-home name="accountHome" entity-class="br.com.ar.seam.Account"/> 

Bây giờ bạn có thể tạo một bí danh bằng cách sử dụng các yếu tố nhà máy

<factory name="account" value="#{accountHome.instance}"/> 

/** 
    * view 
    * 
    * Notice account will be evaluated as accountHome.instance 
    */ 
<h:commandButton value="Deposit" action="#{account.remove}"/> 

Không có gì khác. Cần lưu ý khi sử dụng Hoặc EntityHome (JPA) hoặc HibernateEntityHome (Hibernate), bạn thường cần Để ghi đè một số phương pháp để cải thiện hiệu suất như sau

@Name("accountHome") 
public class AccountHome extends EntityHome<Account> { 

    /** 
     * Override any method you want right here 
     */ 

} 

Về logic kinh doanh ??? Bạn có thể đặt nó bên trong lớp dịch vụ của mình hoặc bạn có thể sử dụng phương pháp tiếp cận theo thiết kế theo miền. Xem here phù hợp hơn với những gì bạn muốn

Thử nghiệm: Sử dụng thành phần Thử nghiệm đường may. Hãy xem Seam ví dụ thư mục Để biết tổng quan về cách bạn có thể thực hiện Kiểm tra mà không cần triển khai

Nếu có thể, hãy sử dụng đường nối-gen Để tạo dự án của bạn. Seam trong cuốn sách hành động, chương 2, có thể cho một cái nhìn sâu sắc tốt như thế nào để khởi động khả năng đường may-gen. đọc kỹ.Bất kỳ đường may-gen tạo ra dự án có thể được mở và Tested trong NetBeans và Eclipse

thành phần JSF: Hãy nhìn vào here

Có nhiều: Không sử dụng @ Out-jection nữa. Sử dụng @Factory để thay thế. @ Out-jection sẽ không được chấp nhận theo phương thức @Factory.

I Think truy vấn được lưu trữ tốt hơn bên trong một tập tin bên ngoài vì

  • Nó có thể đọc được
  • Đó là duy trì

Như sau

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> 
<hibernate-mapping> 
    <query name="GIFT_CARDS_WITH_BUYER"> 
     <![CDATA[ 
      from 
       GiftCard c 
      left join fetch 
       c.buyer 
      where 
       c.recipientNotificationRequested = 1 
     ]]> 
    </query> 
    <query name="GIFT_CARDS_WITHOUT_NO_RELATIONSHIP"> 
     <![CDATA[ 
      from 
       GiftCard 
     ]]> 
    </query> 
</hibernate-mapping> 

Nice one, don' t

.210

nguồn thông tin khác tại đây (định dạng pdf)

JBoss Seam: Agile RIA Development Framework

+0

Wow! Bây giờ đó là một câu trả lời chi tiết. Cảm ơn rất nhiều vì sự thấu hiểu của bạn! – Shadowman

+0

Phải, Arthur là anh chàng Seam ở đây :) – BalusC

+0

Câu trả lời hay. Nhưng tôi sẽ tránh xa Khung ứng dụng Seam. (EntityHome, EntityQuery etc) –

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