2012-07-04 25 views
0

當我在這裏說「EJB」時,我的意思是EJB 3.x!EJB是包,類還是方法級機制

我是EJB新手,想知道如何最好地將我所有的業務邏輯映射到不同的bean。在某種極端情況下,您可以KISS並擁有一個單一的EJB,它擁有可處理您應用業務邏輯100%的bazillion方法。在另一個極端,你可以分割你的業務邏輯到函數級(List<User> getUsersFromMars()),並有一個由1包,1級和1種方法的每一個bazillion的EJB:

Extreme #1: 
    my-ejb.jar/ 
     com.me.myorg.MonolithicBean 
      List<User> getUsersFromMars(); 
      List<User> getUsersFromVenus(); 
      //... a bazillion methods 

Extreme #2: 
    my-mars-ejb.jar/ 
     com.me.myorg.MarsBean 
      List<User> getUsersFromMars(); 
    my-venus-ejb.jar/ 
     com.me.myorg.VenusBean 
      List<User> getUsersFromVenus(); 
    //... a bazillion EJBs with 1-and-only-1 method each 

很顯然,我會假設最佳實踐決定了這兩個極端之間的某種中介策略。所以我問,Java/Oracle對於將應用程序的業務邏輯分解成bean以及如何將它們模塊化到正確的級別(EJB,包,類或方法)以便可重用,可伸縮和安全的問題提出了什麼意見?

回答

2

我認爲這個問題並不是真的專用於EJB,但更多的是關於OO設計,甚至是一般設計。

一個經常出現的模式是,您可以將業務邏輯分解爲DAO和服務。 DAO處理與單個(域)實體相關的所有操作,如Customer。它僅與數據源(通常是數據庫)交互,並且具有保存,更新,刪除等方法,還有getBySomething方法。這些DAO通常可以有1到15個方法,具體取決於您的具體業務情況。

然後你有服務,根據經驗與多於1個實體交互和/或與其他系統(如JMS隊列,郵件系統,Web服務等)進行交互並執行驗證/提供安全性。這些形成了您業務邏輯的動詞,並且通常圍繞特定的商業概念集中,例如,一項採購。因此,您可以使用purchaseGood,purchaseOffer,calculateReduction等方法設定假設的PurchaseService。再次,這將有1到15或20種方法之間的任何地方。

+0

謝謝@Arjan(+1)!那麼,這個「PurchaseService」會在它自己的EJB中,還是我會在同一個EJB中分組多個服務? – IAmYourFaja

+0

PurchaseService將是一個EJB,但它可以(幾乎應該!)注入一些部分邏輯委託給的bean,例如CustomerDAO以獲取有關進行購買的客戶的更多詳細信息,PurchaseDAO將持續實際購買,也許一個OrderQueue發送一個JMS消息,開始交付購買商品的處理,並通知NotificationService發送一個確認其購買的通知。因此,單個服務注入10個甚至更多的其他bean並不罕見。 –

相關問題