我计划根据现有代码库使用 Java 创建 3 个版本的软件。最好的做法是什么?我应该为每个版本创建 3 个不同的项目吗?还有管理版本的工具吗?
最佳答案
我的第一个想法是尽可能保留单个代码库,并使用某种标志进行切换。
如果不可能,我会尝试尽可能保持相同,并让较大的项目使用较小的项目作为子项目,如果可能的话自动启用某些功能 - 例如,每个项目都可以有自己的主线,不同的版本可能只是调用不同的主线,设置标志来启用功能。
如果您的标志是最终的,它甚至应该避免将不必要的代码拉入您的项目中。
最后,最坏的情况,Subversion 中有 3 个分支。
编辑:
你让我对此有了更多的思考,我想我找到了更好的解决方案。
我想我会把它分成四个项目,将所有“常见”的东西组合到一个基础项目中,而不同的东西,我会分散到其他三个项目中——所以假设你有基础项目、演示、付费和商业项目..
如果这三者可能有所不同,您将拥有来自演示/支付/业务类之一的对象来提供该功能。例如,如果付费版本有新的菜单项,您的对象之一中可能有一个 getMenuItems。它将返回一个菜单树,您可以将其放置在菜单栏中。演示版本的项目会更少。
通过这种方式,你的“Base”永远不知道它正在运行哪个版本,它只使用对象。
为了获得这些元素,我需要一个工厂。工厂看起来像这样:
private String[] availablePackages={"business", "pay", "demo"};
public getMenuClass() {
Class c;
for(String package : availablePackages) {
try {
c=Class.forName("com.meh.myapp."+package+".MenuClass");
} catch... {
// No package by that name
}
if(c != null) {
return c.newInstance();
}
}
// Something went wrong, no instance found.
上升趋势是您应该首先尝试实例化 com.meh.myapp.business.MenuClass,然后尝试 ...pay.MenuClass 最后 ...demo.MenuClass。
这应该允许您通过简单地发送不同的 jar 来更改配置 - 如果您决定仅发送演示和主 jar,您将获得一个演示应用程序。通过运送支付 jar ,您将获得支付应用程序。
请注意,您很可能希望业务将大部分工作委托(delegate)给“付费”,而“付费”则将大量工作委托(delegate)给“演示”,但演示对业务或付费一无所知,而“main”只知道其他三个。
这将是一个很好的解决方案,因为不需要配置 - 事实上,您只需要发送付费 jar 即可从演示升级到付费,主 jar 和演示 jar 被重复使用并保持在原来的位置.
关于java - 管理软件版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2496188/