0

在問我的問題之前,我必須描述我們的應用程序是如何構建的。門面/服務架構

我們運行了幾個在服務層使用ejb的web應用程序。我試圖描述一個簡單的例子通信:

  • 一個JSF豆(PersonH​​andler)調用一個門面刪除「人」對象
  • 一個門面可以用許多不同的服務,但不能使用其他的門面。在這種情況下,PersonFacade使用PersonService(刪除該人員)和NotificationService(發送電子郵件)。交易也由門面邏輯控制。如果交易成功提交,則只能發送電子郵件。
  • 服務無法引用其他服務或外觀。而不是這個PersonService只有一個對PersonDao的引用(堅持邏輯)。

我覺得這個架構很常見。這是我的問題。

在PersonFacade的刪除方法中,我們有非常重要的代碼,我們不會重複。每次應該刪除一個人這段代碼應該運行。在另一個外觀邏輯中,我們需要完全相同的代碼,但外觀< - >不允許外觀通信。

這個問題的最佳解決方案是什麼?

繼承人我當前的解決方案,但我不滿意它。我創建了一個新的ejb模塊,其中包含一個處理刪除邏輯的ejb。兩個外觀模塊都依賴於新模塊,所以一切都可以找到,我不會打破「外牆從不使用其他外牆」合同。如果我們每次使用這個,我們需要在不同的地方使用相同的代碼,我們的模塊將會爆炸,模塊會變得混亂。目前我們有超過250個ejb/jar模塊。

回答

0

下面是我會考慮的兩個選項。

  1. 有在鹼門面共同邏輯所有門面的將從延伸,或者
  2. 移動共同邏輯到輔助類(實用)的任何門面可以調用。我看到你已經通過創建一個新的ejb來做類似的事情。我不確定它是否需要成爲ejb,取決於確切的邏輯。