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、