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