我计划在现有的代码库基础上用Java创建一个软件的3个版本。最佳实践是什么?我应该创建3个不同的项目,每个版本一个吗?还有管理版本的工具吗?
发布于 2010-03-23 06:28:31
我的第一个想法是,如果可能的话,保留一个代码库,并使用某种标志进行切换。
如果不可能,我会尝试保持尽可能多的相同,并让较大的项目使用较小的项目作为子项目,如果可能的话,自动启用一些功能--例如,每个项目可以有自己的主项目,不同的构建可能只调用设置标志以启用功能的不同干线。
如果你的标志是最终的,它甚至应该避免把不必要的代码放到你的项目中。
最后,最坏的情况是,Subversion中有3个分支。
编辑:
你让我想了更多,我想我找到了一个更好的解决方案。
我想我会把它分成四个项目,将所有“通用”的东西组合成一个基础项目,而把不同的东西分散到其他三个项目中--所以假设你有基础,演示,支付和业务项目……
在这三个类可能不同的情况下,您可以使用demo/pay/business类中的一个对象来提供功能。例如,如果付费版本有新的菜单项,您的某个对象中可能有一个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。
这应该允许您通过简单地发布不同的jars来更改配置--如果您决定只发布演示和主jars,那么您将获得一个演示应用程序。通过发布pay jar,您将获得pay应用程序。
请注意,您很可能希望业务将其大部分工作委托给" pay ",并希望"pay“将大量工作委托给" demo ",但demo对业务或薪酬一无所知,而"main”只知道其他三个。
这将是一个很好的解决方案,因为不需要配置--实际上,您只需将pay jar从演示升级到pay,主jar和demo jar将被重用并保持在原地。
发布于 2010-03-23 06:35:49
理想的方式是将应用程序划分为“核心”、“附加内容”、“更多附加内容”,并将这些依赖项组合在一起。不过,这可能会有很多工作,这取决于您拥有的代码库。
如果您使用SVN进行源代码管理,您可以在现有代码库的基础上为每个版本创建3个分支。通常,人们会尽量避免这种情况,因为例如,如果您需要修复跨这些分支的常见bug,则需要在其中一个分支中修复该错误,然后将其合并到其余分支中。也许其他源代码库可以更好地处理这种情况,但对于SVN,我想这是唯一的方法。
至于版本管理,我们使用maven。如果你采用“核心”、“附加内容”、“更多附加内容”的方法,maven可以提供帮助,因为它可以非常干净地跟踪每个组件的版本(使用pom)。
编辑:Bill的建议可能是最实用的。如果你使用了一个最后的标志,是的,编译器应该丢弃那些无法访问的代码。
https://stackoverflow.com/questions/2496188
复制相似问题