2010-03-25 65 views
6

使用EJB3時,是否有任何理由進行委託?因爲我從委託中看到的唯一真正好處是它允許隱藏查找和訪問EJB體系結構的詳細信息。那麼它也提供了一些解耦,但它大部分是未使用的,恕我直言。使用EJB3我們有注入,所以現在我可以用@EJB註釋創建一個變量並按原樣使用它。 我還需要代表嗎?這種注射資源是否消耗?我的意思是如果我在JSF的請求中使用它,託管bean可能更好地使用委託來減少這些注入調用?EJB3業務代表

謝謝!

+0

您似乎對「服務定位器」和「業務代表」之間的混淆 - 正如下面的答案所表明的,業務代表有不同的理由,而不是抽象所有的JNDI用法,並隱藏了初始上下文創建的複雜性,EJB home對象查找等 – 2010-03-25 19:25:34

回答

7

讓我們回顧一下在力原business delegate pattern

  • 表示層的客戶端需要訪問企業服務。
  • 不同的客戶端(如設備,Web客戶端和胖客戶端)需要訪問業務服務。
  • 業務服務API可能會隨着業務需求的變化而變化。
  • 希望最小化表示層客戶端和業務服務之間的耦合,從而隱藏服務的底層實現細節,如查找和訪問。
  • 客戶端可能需要實現業務服務信息的緩存機制。
  • 希望減少客戶端和業務服務之間的網絡流量。

所有這些力量今天仍然存在 - 他們沒有必要存在於每個項目,但可能

主要變化是我們不需要業務代表來最小化耦合(以斜體表示)。依賴注入解決了查找和訪問問題。

我喜歡analysis from Adam Bien:關於耦合的一點仍然沒有解決,自然是例外。異常現在未被選中,但仍然存在。客戶是否應該被完全屏蔽EJB異常,這取決於項目中存在的力量。

在引入業務委託模式來解決查找和訪問問題(我懷疑是很多項目的情況)的情況下,我們實際上不再需要它了。如果商業代表是出於其他原因,它仍然是有道理的。

PS:從我自己的經驗,資源注入從來就不是一個性能問題(我一直有一個更嚴重的性能問題不是採取注射:)

1

業務代表毫秒別處只是隱藏一個黑客與JNDI查找整個kludge和所有相關的清理和錯誤捕獲。資源注入通過Gavin Kings Seam進入J2EE,它基本上遵循儘可能少的層次和所有配置的原則。所以忘記那些舊的模式,只是使用正常的OO思維。

我的2美分。

0

嗯,其實我不太瞭解這些觀點。

表示層客戶端需要訪問 到業務服務。

JSF的表現層是託管bean,不是嗎?如果是這樣,那麼通過注射解決這個問題。對?

不同的客戶端,如設備, Web客戶端和胖客戶端,需要 接入業務服務。

我沒有設備和胖客戶端。什麼是Web客戶端?這是不是從上面的表示層?如果是這樣,那麼我們就和上面一樣。

業務服務API可能會更改爲業務需求演變的 。

我無法理解代理如何在API更改時提供幫助。當然,如果只是通過改變某些傳遞參數的類型或只使用特定字段而不是某些參數來處理一些細微變化,那麼它可以提供幫助,但我不認爲這種情況經常發生,並且它不是那麼困難,並且可能會更好地從託管bean或其他方法更改方法調用。無論如何,重大更改都會要求更改方法調用。

客戶端可能需要執行緩存 商業服務機制 信息。

緩存是因爲我不知道該怎麼緩存和如何做到這一點:)這是否意味着我可以創造一些變量,將存儲了一定的成效,並使用EJB調用,只有當這個變量是一個很難回答的問題第一次要求?代表應該是這樣的共享資源的良好做法嗎?

它希望減少客戶和業務 服務之間的網絡流量 。

代表如何減少網絡流量?通過與存儲一些值的變量相同的方法?