模块化Java ee应用程序

时间:2013-03-15 16:58:32

标签: java java-ee architecture

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

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

第三方编辑

例如,我有这些模型类

  • ManageLdap使用createAccountdeleteAccount
  • 等方法 管理ldap组的
  • GroupManager

在业务外观中,我有一个方法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存储库的选项

  • 我必须实现一个模型类来创建repos,
  • 在业务外观中添加了一些方法
  • 创建一个要由视图访问的其他bean。

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

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

1 个答案:

答案 0 :(得分:3)

首先尝试将您的应用程序拆分为多个层,如:

  • DAO
  • 服务队
  • 安全
  • 查看

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

然后创建一组模块(例如service-apiservice-impldao-apidao-impl)并涉及一些构建工具( gradle maven )来管理它们。

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

每个模块 - 分隔的jar文件。

经过这样的重构后,将来破解应用程序设计会更加困难。