6

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

该应用程序已被拆分为多个层。但我离定义 API 还很遥远。我已经稍微清理了应用程序。现在所有的 bean 都通过业务外观方法访问业务逻辑。但是业务外观由大约 40 种方法组成,我认为这不是很好。

第三方编辑

例如我有这些模型类

  • ManageLdapcreateAccount使用和之类的方法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) {  }
}

而在商业门面

package BusinessFacade.Foo

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

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

  • 我必须实现一个模型类来创建存储库,
  • 将一些方法放在业务外观中,并
  • 创建一个额外的 bean 以供视图访问。

这使得立面更大更混乱,但除此之外,这不是我所说的模块化设计。

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

4

1 回答 1

4

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

  • 服务
  • 安全
  • 看法
  • 等等。

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

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

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

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

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

于 2013-03-15T17:16:08.493 回答