版本號閒談

版本號閒談

不管是對於後端還是前段版本兼容始終是個無法避免的難題,而其中的版本號命令也應該符合一定的規則,否則比較版本時就比較麻煩.

版本號的格式:V<主版本號>.<副版本號>.<發佈號>

版本號的初始值:V1.0.0

版本號管理規則:
1、產品的主體構件進行重大修改,主版本號加1
2、產品升級增加特性副版本號加1
3、主版本號加1時,副版本號和發佈號置爲0
4、副版本號加1時,發佈號置爲0

Java代碼實現版本號比較

針對以上命名的規則,我寫了一個版本號比較工具.

/**
 * 版本號比較
 * 
 * @author xuyi
 * @Time 2016年12月3日 下午3:13:14
 * @類名 VersionCompare
 * @功能描述:
 * @春風十里不如你
 * @備註:
 */
public class VersionCompare
{
    /**
     * 這個方法應該算是比較完善的.
     * 
     * @param firstVersion
     * @param secondVersion
     * @return
     */
    public static VersionEnum compare(String firstVersion, String secondVersion)
    {
        if (firstVersion.equals(secondVersion))
            return VersionEnum.EQUAL;
        if (moreLaterVersion(firstVersion, secondVersion))
            return VersionEnum.HIGHER;
        return VersionEnum.LOWER;

    }

    /**
     * 判斷兩個版本號是否爲同一個版本號
     * 
     * @param firstVersion
     * @param secondVersion
     * @return
     */
    public static boolean isEqualsVersion(String firstVersion, String secondVersion)
    {
        return firstVersion.equals(secondVersion);
    }

    /**
     * 判斷第一個版本號是否比後一個版本號更高
     * 
     * @param firstVersion
     * @param secondVersion
     * @return
     */
    public static boolean moreLaterVersion(String firstVersion, String secondVersion)
    {
        //使用split方法時,注意一點,以"."分隔時要轉義,因爲使用的是正則處理的.
        String[] firstVersions = firstVersion.replace("V", "").split("\\.");
        String[] secondVersions = secondVersion.replace("V", "").split("\\.");

        int length = firstVersions.length;
        for (int i = 0; i < length; i++)
        {
            boolean later = Integer.compare(Integer.valueOf(firstVersions[i]), Integer.valueOf(secondVersions[i])) > 0;
            if (later)
            {
                return true;
            }
        }
        return false;
    }
}

/**
 * 版本比較的枚舉類型
 * 
 * @author xuyi
 * @Time 2016年12月3日 下午3:22:15
 * @類名 VersionEnum
 * @功能描述:
 * @春風十里不如你
 * @備註:
 */
@Getter
public enum VersionEnum
{

    LOWER("lower", -1), EQUAL("equal", 0), HIGHER("higher", 1);

    private int     code;
    private String  desc;

    VersionEnum(String desc, int code)
    {
        this.desc = desc;
        this.code = code;
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章