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、