模块化Java ee应用程序

San*_*o J 6 java architecture java-ee

我需要重构一个Java EE应用程序,因为当前的设计不是很模块化,事实上它实在是一团糟.有一个商业门面,但由于应用程序是由几个人开发的,因此原始设计被忽略了几次.该应用程序当前正在使用JSF在tomcat上运行,但很快就会被移植到websphere.我已经对不同的设计模式进行了一些研究,以便从视图中封装业务逻辑,以及如何使应用程序模块化,以便更容易为其添加更多功能,因为将来应用程序将得到增强.我读过有关OSGI的内容,但我认为这将是一种矫枉过正.

该应用程序已分层.但我远没有定义API.我已经清理过应用程序了.现在,所有bean都通过业务外观方法访问业务逻辑.但业务外观包含大约40种方法,我认为这些方法并不是很好.

第三方编辑

例如,我有这些模型类

  • ManageLdap与类似的方法createAccount和deleteAccount
  • GroupManager 管理ldap组

在商业门面我有一个方法,createAccount这

  • 调用ManagerLdap该类来创建一个ldap帐户和
  • 做一些伐木也
  • 电话 GroupManager

这个伪代码

package Model.ManageLdap

public class ManageLdap 
{
  public ldapAccount createAccount() {  }

  public ldapAccount deleteAccount() {  }
}

public class GroupManager
{
  public bool addAccountToGroup(var account) {  }
}
Run Code Online (Sandbox Code Playgroud)

并在商业门面

package BusinessFacade.Foo

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

现在,如果我想为应用程序添加其他功能,例如为用户创建subversion存储库的选项

  • 我必须实现一个模型类来创建repos,
  • 把一些方法放在业务门面和
  • 创建一个要由视图访问的其他bean.

这使得立面更大,更令人困惑,但除此之外,这不是我所说的模块化设计.

那么如何在没有巨大业务外观的情况下从视图中分离业务逻辑呢?

Mic*_*aev 4

首先尝试将您的应用程序分成几个层,例如:

  • DAO
  • 服务
  • 安全
  • 看法
  • ETC。

然后从每一层提取一些API(如dao-api、service-api等。每个api模块应该有一组接口)。

然后创建一组模块(如service-api、service-impl、dao-api、dao-impl)并使用一些构建工具(gradle或maven)来管理它们。

不允许一个实现模块依赖于另一实现模块(仅限 impl -> api 或 api -> api)。

每个模块 - 单独的 jar 文件。

经过这样的重构之后,将来破坏应用程序设计将变得更加困难。