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、