信贷业务(Ali)

1、信贷业务视角

  信贷业务主要有两个视角,借款人和出资机构。借款人关心借多少钱,还多少钱,多少利息;机构关心信贷资产风险,收益。

  领域模型上两个视角分开:个人--->账单、机构--->资产。出资机构可以多样化(机构对接)。多一个机构(多一种类型的对接)。账单--机构资产--机构对接。借记账务,贷记账务,资产账务,资信调查,信贷管理。

2、一达通·流水贷

  一达通·流水贷业务:面向使用一达通出口基础服务的客户,以出口额度积累授信额度的无抵押、免担保、纯信用贷款服务,该服务由**联合多家银行共同推出。下面流向图是业务的基本流程。

3、代码中减少if...else...的使用

在我们的代码中有很多是基于类型的不同而有不同的处理逻辑,最典型的,不同枚举类型的转换:

public static CreditSource convertCreditSource(Short quotaSource) {
        if (quotaSource == null) {
            return null;
        }
        if (StringUtils.equals(QuotaSourceEnum.CMBSX.getValue(), quotaSource.toString())) {
            return CreditSource.bank_cmb;
        }
        if (StringUtils.equals(QuotaSourceEnum.SUNSHINESX.getValue(), quotaSource.toString())) {
            return CreditSource.ecreditbao_sun;
        }
        if (StringUtils.equals(QuotaSourceEnum.CMBCREDITLOANSX.getValue(), quotaSource.toString())) {
            return CreditSource.creditloan_cmb;
        }
        if (StringUtils.equals(QuotaSourceEnum.CREDITBUY_BUYERSX.getValue(), quotaSource.toString())) {
            return CreditSource.creditbuy_buyer;
        }
        if (StringUtil.equals(QuotaSourceEnum.CREDITBUY_SELLERSX.getValue(), quotaSource.toString())) {
            return CreditSource.creditbuy_seller;
        }
        return null;
    }

如果可以将这段代码修改成如下方式,会不会看起来更简洁一些?

    public static CreditSource convertCreditSource(Short quotaSource) {
        if (quotaSource == null) {
            return null;
        }
        return QuotaSourceEnum.parse(quotaSource.toString()).getCreditSource();
    }

要实现这种修改,即我们需要改造如下QuotaSourceEnum枚举类:

    public enum QuotaSourceEnum {
        /** 保证金授信来源 **/
        BZJSX("1"),
        /** 即时到账下的行业授信 **/
        INSTANT_HYSX("2"),
        /** 账期交易下的行业授信 **/
        ZHANGQI_HYSX("3"),
        /** 关系授信 **/
        GXSX("4"),
        /** 协议授信 **/
        XYSX("5"),
        /** 招行授信 **/
        CMBSX("6"),
        /** 阳光授信 **/
        SUNSHINESX("7"),
        /** 招行贷款 **/
        CMBCREDITLOANSX("8"),
        /** 买家赊购买家授信 **/
        CREDITBUY_BUYERSX("9"),
        /** 买家赊购卖家授信 **/
        CREDITBUY_SELLERSX("10");

        String value;

        QuotaSourceEnum(String value){
            this.value = value;
        }

        public String getValue() {
            return value;
        }

        public void setValue(String value) {
            this.value = value;
        }

        public static QuotaSourceEnum parse(String value) {
            if (StringUtils.isBlank(value)) {
                return null;
            }
            for (QuotaSourceEnum quotaSource : QuotaSourceEnum.values()) {
                if (value.equals(quotaSource.value)) {
                    return quotaSource;
                }
            }
            return null;
        }
    }

修改成:

public enum QuotaSourceEnum {
    /** 保证金授信来源 **/
    BZJSX("1", null),
    /** 即时到账下的行业授信 **/
    INSTANT_HYSX("2", null),
    /** 账期交易下的行业授信 **/
    ZHANGQI_HYSX("3", null),
    /** 关系授信 **/
    GXSX("4", null),
    /** 协议授信 **/
    XYSX("5", null),
    /** 招行授信 **/
    CMBSX("6", CreditSource.bank_cmb),
    /** 阳光授信 **/
    SUNSHINESX("7", CreditSource.ecreditbao_sun),
    /** 招行贷款 **/
    CMBCREDITLOANSX("8", CreditSource.creditloan_cmb),
    /** 买家赊购买家授信 **/
    CREDITBUY_BUYERSX("9", CreditSource.creditbuy_buyer),
    /** 买家赊购卖家授信 **/
    CREDITBUY_SELLERSX("10", CreditSource.creditbuy_seller);
 
    final String value;
    final CreditSource creditSource;
 
    QuotaSourceEnum(String value, CreditSource creditSource){
        this.value = value;
        this.creditSource = creditSource;
    }
....
}

个人感觉使用Map的方式比这种if-else要简洁一些。还有字符串的比较,统一使用:

StringUtils.equals(str1, str2);
StringUtils.equalsIgnoreCase(str1, str2);

4、枚举类Enum中添加逻辑

  Enum中并不仅仅是一种枚举类型,它其实是一种特殊的类。比如在《Effective Java》中推荐使用enum来实现单例模式。既然作为类,我们就可以向它内部添加逻辑,把和它相关的逻辑放在它的内部,而不是仅仅把它作为枚举,然后在外部做if-else判断。比如我们代码中有如下的逻辑

5、

原文地址:https://www.cnblogs.com/RunForLove/p/5778890.html