我需要重构一个Java EE应用程序,因为当前的设计不是很模块化,事实上它实在是一团糟。有一个商业门面,但由于应用程序是由几个人开发的,因此原始设计被忽略了几次。该应用程序当前正在使用JSF在tomcat上运行,但很快就会被移植到websphere。我已经对不同的设计模式进行了一些研究,以便从视图中封装业务逻辑,以及如何使应用程序模块化,以便更容易为其添加更多功能,因为将来应用程序将得到增强。我读过有关OSGI的内容,但我认为这将是一种矫枉过正。
应用程序已经拆分为多个层。但我远没有定义API。我已经清理过应用程序了。现在,所有bean都通过业务外观方法访问业务逻辑。但是业务外观包含大约40种方法,我认为这些方法并不是很好。
第三方编辑
例如,我有这些模型类
ManageLdap
使用createAccount
和deleteAccount
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存储库的选项
这使得立面更大,更令人困惑,但除此之外,这不是我所谓的模块化设计。
那么如何在没有巨大业务外观的情况下从视图中分离业务逻辑呢?
答案 0 :(得分:3)
首先尝试将您的应用程序拆分为多个层,如:
然后从每个层中提取一些API(如dao-api,service-api等等。每个api模块都应该有一组接口)。
然后创建一组模块(例如service-api
,service-impl
,dao-api
,dao-impl
)并涉及一些构建工具( gradle 或 maven )来管理它们。
不允许一个实现模块依赖于另一个实现模块(只有impl - > api或api - > api)。
每个模块 - 分隔的jar文件。
经过这样的重构后,将来破解应用程序设计会更加困难。