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
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
.210nguồn thông tin khác tại đây (định dạng pdf)
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
Phải, Arthur là anh chàng Seam ở đây :) – BalusC
Câu trả lời hay. Nhưng tôi sẽ tránh xa Khung ứng dụng Seam. (EntityHome, EntityQuery etc) –