我需要重构一个Java EE应用程序,因为当前的设计不太模块化,实际上是一团糟。虽然有一个业务外观,但由于该应用程序由多人开发,因此原始设计已经被忽略了多次。该应用程序目前在tomcat上运行,使用JSF,但很快将移植到websphere上。我已经对不同的设计模式进行了一些研究,以封装业务逻辑并使应用程序模块化,以便将来容易添加更多功能,因为该应用程序将在未来得到增强。我已经阅读了关于OSGI的信息,但我认为那会过度了。
该应用程序已经分成了各个层。但我还没有定义API。我已经稍微整理了一下应用程序。现在所有bean都通过业务外观方法访问业务逻辑。但是,业务外观包含大约40个方法,我认为这不太好。
例如,我有这些模型类:
ManageLdap,其中包括createAccount和deleteAccount等方法 GroupManager,管理ldap组
在业务外观中,我有一个createAccount方法:
调用ManagerLdap类来创建ldap帐户 做一些日志记录 调用GroupManager
现在,如果我想为应用程序添加额外的功能,比如为用户创建一个子版本库的选项:
那么,如何将业务逻辑与视图分离,而不需要一个庞大的业务门面呢?
该应用程序已经分成了各个层。但我还没有定义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) { }
}
在业务门面中
package BusinessFacade.Foo
public class SomeFoo
{
public ldapAccount createAccount()
{
var ldapAccount = new ManageLdap.createAccount();
Logger.log("Account created");
var accountWasAdded = GroupManager.addAccountToGroup(ldapAccount);
}
}
现在,如果我想为应用程序添加额外的功能,比如为用户创建一个子版本库的选项:
- 我必须实现一个模型类来创建仓库,
- 在业务门面中放置一些方法,以及
- 创建一个额外的bean供视图访问。
那么,如何将业务逻辑与视图分离,而不需要一个庞大的业务门面呢?