一個該不應抽出來的函數引發的思考

背景:redis

最近業務很少,公司的老哥開始review個人代碼。受到了一頓教育(實際上是由於我前段時間搞了個bug.....)數據庫

場景:app

須要寫一個利用redis自增獲得id並保存到數據庫的功能。ide

很簡單,在AppConfigManager類裏面代碼以下:編碼

/**
* 從redis裏面獲得自增的Id
* @return
*/
public Integer getId(){
Long longId =redis.incr(CacheUtil.getIdKey());
return longId != null ? longId.intValue() : null;
}

固然前面在系統啓動的時候須要一行:spa

redis.set(CacheUtil.getIdKey(), AppConfigRepository.getMaxAppId());get


那麼問題來了:當我在數據庫裏面保存id的時候,若是重複了該怎麼處理?
(固然通常是不會重複的,只有在手動修改數據的時候會有觸發重複的可能。)
個人
* 新增規 * 利用redis的incr實現appId的自 * @param query
 * @return
*/
@Override
public AppConfig saveWXAppConfig(AppConfigQuery query) {

if(wxAppConfigRepository.getByAppId(appConfig.getAppId())!= null){
log.error("appId 重複! appId! appConfig:{}", appConfig);
     redis.set(CacheUtil.getIdKey(), wxAppConfigRepository.getMaxAppId());
     appConfig.setAppId(appConfigManager.getAppId());
}
    return wxAppConfigRepository.saveWXAppConfig(appConfig);
);
}
注意紅色的部分:這裏我先將redis裏面的值更新到最大值,而後在去AppConfigManager類裏面getId()一次,那麼,此時獲得的就是最新的不會重複的id了。
這裏師兄說:鏈路太長,代碼可讀性太差。
當時個人心裏全是問號❓❓❓❓❓❓
就兩行代碼會致使可讀性變差?雖然我也知道這樣可讀性的確不好,可是爲了保證代碼的可複用。我選擇這樣寫。
經師兄糾正:複用代碼的優先級是低於可讀性的!!!
後改正以下:
/**
* 新增規則:
* 利用redis的incr實現appId的自增
* @param query
* @return
*/
@Override
public AppConfig saveWXAppConfig(WXAppConfigQuery query) {
AppConfig appConfig = convertToAppConfig(query);
if(wxAppConfigRepository.getByAppId(appConfig.getAppId())!= null){
log.error("appId 重複! appId! appConfig:{}", appConfig);
appConfig = resetAppId(appConfig);
}
return wxAppConfigRepository.saveWXAppConfig(appConfig);

}
/**
* 在redis裏面設置新的appId,
* 利用getAppId方法,返回自增的appID
* @param appConfig
* @return
*/
private AppConfig resetAppId(AppConfig appConfig) {
String appIdKey = CacheUtil.getAppIdKey();
redis.set(appIdKey, wxAppConfigRepository.getMaxAppId());
appConfig.setAppId(appConfigManager.getAppId());
return appConfig;
}
意義:大型的項目,是須要幾我的團隊協做完成的,而且,會經歷幾代的迭代,高質量和規範的代碼這時候就顯得尤其重要了。
雖然,只是一個編碼習慣上的小問題,可是仍是在項目空閒的時候去儘可能糾正這些問題,否則,當一個需求跑過來的時候,如何去
相關文章
相關標籤/搜索