嚴重依賴 EJB 的 CS 架構產品:胖客戶端 → EJB 業務介面 → DAO。業務邏輯複雜,UI 層非簡單 CRUD。
CustomerBean 塞進「購買、退貨、換貨」所有邏輯;ProductBean 塞進「定義、價格」邏輯。buyProductV1, buyProductV2...)。識別核心領域概念:Customer、Product、Order、PricingStrategy... 每個負責單一業務職責。
@Stateless
public class OrderServiceBean implements OrderService {
@EJB private InventoryService inventory;
@EJB private PricingService pricing;
public OrderDTO placeOrder(OrderRequest req) {
// 1. 解析/驗證請求
// 2. 協調領域物件
Customer customer = customerRepo.find(req.getCustomerId());
Order order = customer.placeOrder(req.getItems(), pricing, inventory);
// 3. 持久化
orderRepo.save(order);
// 4. 組裝回傳 DTO
return toDTO(order);
}
}
public class Customer {
private List orders = new ArrayList<>();
public Order placeOrder(List items, PricingService pricing, InventoryService inventory) {
Order order = new Order(this, items);
order.price(pricing);
order.reserveStock(inventory);
orders.add(order);
return order;
}
}
PricingStrategy 可被多個流程複用。EJB 是技術基礎設施,不是業務架構。讓 EJB 做它擅長的事(事務、安全、分佈),把業務還給物件。