2013-03-15 89 views
6

我需要重構Java EE應用程序,因爲當前的設計不是非常模塊化的,實際上它非常混亂。有一個商業門面,但由於應用程序已由幾個人開發,因此原來的設計已被多次忽略。該應用程序當前正在使用JSF的tomcat上運行,但它很快就會移植到websphere中。我已經做了一些關於不同設計模式的研究,以便從視圖中封裝業務邏輯,以及如何使應用程序模塊化,以便將更多功能添加到其中,因爲未來應用程序將得到增強。我讀過關於OSGI,但我認爲這將是一個矯枉過正。模塊化java ee應用程序

該應用程序已被拆分成圖層。但是我很少定義API的。我已經清理了一下應用程序。現在所有的bean都通過業務外觀方法訪問業務邏輯。但商業外觀由大約40種我認爲不太好的方法組成。

第三方編輯

例如,我有這些模型類

  • ManageLdap與像createAccount方法和deleteAccount
  • 其管理GroupManager LDAP組

在商務門面我有一個見面HOD createAccount

  • 調用ManagerLdap類來創建一個LDAP帳號和
  • 做一些記錄,也
  • 電話GroupManager

這個僞代碼

package Model.ManageLdap 

public class ManageLdap 
{ 
    public ldapAccount createAccount() { } 

    public ldapAccount deleteAccount() { } 
} 

public class GroupManager 
{ 
    public bool addAccountToGroup(var account) { } 
} 

而且在商務門面

package BusinessFacade.Foo 

public class SomeFoo 
{ 
    public ldapAccount createAccount() 
    { 
    var ldapAccount = new ManageLdap.createAccount(); 
    Logger.log("Account created"); 
    var accountWasAdded = GroupManager.addAccountToGroup(ldapAccount); 
    }  
} 

現在,如果我希望把更多的功能應用,如選項來創建一個Subversion版本庫的用戶

  • 我要實現一個模型類來創建回購協議,
  • 把一些商業門面中的方法和
  • 創建一個額外的bean以供視圖訪問。

這使得門面更大,更令人困惑,但除此之外,這不是我所說的模塊化設計。

那麼我怎樣才能從視圖分離業務邏輯,而沒有一個巨大的商業門面?

+0

這已經在SO上討論過很多次了。看看[這](http://stackoverflow.com/questions/647922/java-application-architecture-guide?rq=1)和[this](http://stackoverflow.com/questions/286846/describe - 架構 - 你使用的Java Web應用程序?RQ = 1)等等。 – techuser 2013-03-15 17:29:05

+0

這可能是[企業架構師](http://stackoverflow.com/documentation/enterprise-architect)或[架構入門](http://stackoverflow.com/documentation/architecture/7435/)的一個好主題。 。 – surfmuggle 2016-10-31 22:14:03

+0

@techuser [Java應用程序體系結構指南](http://stackoverflow.com/questions/647922/)或[描述java web應用程序的體系結構](http://stackoverflow.com/questions/286846/)似乎是以廣泛地解決操作問題。 在閱讀[最佳企業購物車](http://stackoverflow.com/a/6303154/)後,我認爲看着開源代碼例如[BroadleafCommerce](https://github.com/BroadleafCommerce)可能是一個很好的開始,可以瞭解如何組織代碼。 – surfmuggle 2016-10-31 22:15:14

回答

3

對於第一次嘗試將應用程序分成幾層,如:

  • DAO
  • 服務隊
  • 安全
  • 查看
  • 等等

然後提取一些API從每一層(如dao-api,service-api等等pi模塊應該有一組接口)。

然後創建一個組模塊(如service-apiservice-impldao-apidao-impl),並涉及到一些建築工具( gradle這個行家)來管理它們。

而不是允許一個實現模塊對另一個實現模塊(僅限impl - > api或api - > api)具有依賴性。

每個模塊 - 分離的jar文件。

經過這樣的重構之後,將來很難打破應用程序設計。

+0

感謝您的回答,我編輯了我原來的問題,希望您能給我一些提示。 – 2013-03-16 15:49:56

+0

如果每個模塊都會被分離出jar文件,那麼部署如何? – 2013-11-12 13:11:52

+0

你能詳細說明你的意思嗎?只有實現 - > api或api - > api'這是否意味着一個實現可以基於幾個apis(api或api),它們是基於另一個api的? – surfmuggle 2016-10-31 20:33:36