對(duì)象存在性檢測集中管理-創(chuàng)新互聯(lián)

在大型業(yè)務(wù)系統(tǒng)中, 常常需要從數(shù)據(jù)庫中查詢某個(gè)實(shí)體對(duì)象。 在進(jìn)行處理之前, 必須先檢測該實(shí)體是否存在,以增強(qiáng)系統(tǒng)的健壯性。 不過, 檢測代碼充斥在主業(yè)務(wù)流程中又會(huì)大大降低業(yè)務(wù)邏輯的清晰性, 最好集中起來進(jìn)行管理。 因此,編寫了一個(gè)類來做這個(gè)事情, 只需要一行調(diào)用就可以完成相應(yīng)實(shí)體對(duì)象的檢測。

創(chuàng)新互聯(lián)公司專注于蘇州企業(yè)網(wǎng)站建設(shè),成都響應(yīng)式網(wǎng)站建設(shè),成都商城網(wǎng)站開發(fā)。蘇州網(wǎng)站建設(shè)公司,為蘇州等地區(qū)提供建站服務(wù)。全流程按需定制網(wǎng)站,專業(yè)設(shè)計(jì),全程項(xiàng)目跟蹤,創(chuàng)新互聯(lián)公司專業(yè)和態(tài)度為您提供的服務(wù)

     美中不足的一點(diǎn)是, 打 log 的位置發(fā)生變化了。由于打 log 的主要目標(biāo)是為了便于調(diào)試和定位錯(cuò)誤位置, 為了補(bǔ)償, 一種辦法是調(diào)用方法時(shí)根據(jù)具體語境傳入自定義的錯(cuò)誤消息, 根據(jù)錯(cuò)誤消息可以定位錯(cuò)誤位置; 另一種辦法是, 如果不希望每次調(diào)用都使用不同的自定義錯(cuò)誤消息, 使用 log.error("error", bizEx) 打印異常棧信息, 也可以獲取到拋出錯(cuò)誤的位置。

    NOTE: 為了遵循公司代碼的保密性, 隱去導(dǎo)入的包名, 各位讀者可以借鑒其思想, 運(yùn)用到自己的項(xiàng)目中去。

    使用方法:

對(duì)象存在性檢測集中管理

import static util.CheckEntityExistManager.checkEntity;import util.CheckEntityExistManager.EntityChecker;public class EntityExistCheckTester {    
    private static final Log log = LogFactory.getLog(EntityExistCheckTester.class);    
    public static void main(String[] args) throws BizException {
        demo();
        demo2();
    }    
    public static ResultSet demo() {        
        try {            // Not Need type casting 
            DeviceDO device = checkEntity(EntityChecker.DISK_ID_CHECK, "d-xxx");
            System.out.println(device);
            VmDO vm = checkEntity(EntityChecker.VM_NAME_CHECK, "vm-name","user-defined msg: vm not exist when creating");
            System.out.println(vm);            return new ResultSet(IErrorCode.SUCCESSFUL);
        } catch (BizException bizEx) {
            log.error("error", bizEx);            return new ResultSet(bizEx.getErrorCode());
        } catch (Exception ex) {
            log.error(ex);            return new ResultSet(IErrorCode.FAILED);
        }
    }    
    public static ResultSet demo2() {        try {
            ZoneDO zone = checkEntity(EntityChecker.ZONE_ID_CHECK, "z-yy");
            System.out.println(zone);            return new ResultSet(IErrorCode.SUCCESSFUL);
        } catch (BizException bizEx) {
            log.error("error", bizEx);            return new ResultSet(bizEx.getErrorCode());
        } catch (Exception ex) {
            log.error(ex);            return new ResultSet(IErrorCode.FAILED);
        }
    }

}

對(duì)象存在性檢測集中管理

實(shí)體存在性集中檢測類: CheckEntityExistManager:

對(duì)象存在性檢測集中管理

public class CheckEntityExistManager {    
    private static final Log log = LogFactory.getLog(CheckEntityExistManager.class);    
    private static CheckEntityExistManager checkEntityMgr = getInstance();    
    private CheckEntityExistManager() {
    }    
    private static CheckEntityExistManager getInstance() {        if (checkEntityMgr == null) {
            checkEntityMgr = new CheckEntityExistManager();
        }        return checkEntityMgr;
    }    
    interface ICheckEntityExist<T> {
        T checkEntityExist(String entityValue, String msg) throws BizException;
    }    
    private static ICheckEntityExist<DeviceDO> diskIdChecker = checkEntityMgr.new CheckDiskIdExist();    private static ICheckEntityExist<VmDO> vmNameChecker = checkEntityMgr.new CheckVmExist();    private static ICheckEntityExist<ZoneDO> zoneChecker = checkEntityMgr.new CheckZoneExist();    
    public enum EntityChecker {
        DISK_ID_CHECK(diskIdChecker, DeviceErrorCode.DISK_NOT_EXIST),
        VM_NAME_CHECK(vmNameChecker, VmErrorCode.ERROR_VM_NOT_EXIST),
        ZONE_ID_CHECK(zoneChecker, ZoneErrorCode.ZONE_NOT_EXIST);
        
        EntityChecker(ICheckEntityExist<?> entityChecker, IErrorCode errorCode) {            this.entityChecker = entityChecker;            this.errorCode = errorCode;
        }        
        
        private static Map<String, IErrorCode> errorMap = new HashMap<String, IErrorCode>();        
        static {            for (EntityChecker entityChecker: EntityChecker.values()) {
                ICheckEntityExist<?> checker = entityChecker.getEntityChecker();
                errorMap.put(checker.getClass().getSimpleName(), entityChecker.getErrorCode());
            }
        }        
        private static IErrorCode getErrorCode(String checkClassSimpleName) {            return errorMap.get(checkClassSimpleName);
        }        
        
        private ICheckEntityExist<?> entityChecker;        private IErrorCode errorCode;        
        public ICheckEntityExist<?> getEntityChecker() {            return entityChecker;
        }        public void setEntityChecker(ICheckEntityExist<?> entityChecker) {            this.entityChecker = entityChecker;
        }        public IErrorCode getErrorCode() {            return errorCode;
        }        public void setErrorCode(IErrorCode errorCode) {            this.errorCode = errorCode;
        }
        
        
    }
    
    @Autowired    private DeviceService deviceService;
    
    @Autowired    private VmService vmService;
    
    @Autowired    private ZoneService zoneService;    
    class CheckDiskIdExist implements ICheckEntityExist<DeviceDO> {
        
        @Override        public DeviceDO checkEntityExist(String diskId, String msg) throws BizException {
            IErrorCode errorCode = EntityChecker.getErrorCode(CheckDiskIdExist.class.getSimpleName());
            String message = (msg == null ? errorCode.getMessage() : msg);            //DeviceDO dev = deviceService.getDevice(diskId);    
            DeviceDO dev = new DeviceDO();            return CheckEntityExistManager.throwexOrReturn(dev, message, errorCode);
        }
        
    }    
    class CheckVmExist implements ICheckEntityExist<VmDO> {

        @Override        public VmDO checkEntityExist(String vmName, String msg) throws BizException {
            IErrorCode errorCode = EntityChecker.getErrorCode(CheckVmExist.class.getSimpleName());
            String message = (msg == null ? errorCode.getMessage() : msg);            //VmDO vm = vmService.queryVmByName(vmName);
            VmDO vm = null;            return CheckEntityExistManager.throwexOrReturn(vm, message, errorCode);
        }
        
    }    
    class CheckZoneExist implements ICheckEntityExist<ZoneDO> {

        @Override        public ZoneDO checkEntityExist(String zoneId, String msg) throws BizException {
            IErrorCode errorCode = EntityChecker.getErrorCode(CheckZoneExist.class.getSimpleName());
            String message = (msg == null ? errorCode.getMessage() : msg);            //ZoneDO zone = zoneService.queryZoneById(zoneId);
            ZoneDO zone = null;            return CheckEntityExistManager.throwexOrReturn(zone, message, errorCode);
        }
        
    }    
    public static <T> T throwexOrReturn(T entity, String message, IErrorCode errorCode) 
                                                        throws BizException {        if (entity == null) {
            log.error(message);            throw new BizException(errorCode);
        }        return entity;
    }    
    public static <T> T checkEntity(EntityChecker entityChecker, String entityValue, String customMsg) throws BizException {
        ICheckEntityExist<T> checker = (ICheckEntityExist<T>) entityChecker.getEntityChecker();        return checker.checkEntityExist(entityValue, customMsg);
        
    }    
    public static <T> T checkEntity(EntityChecker entityChecker, String entityValue) throws BizException {
        ICheckEntityExist<T> checker = (ICheckEntityExist<T>) entityChecker.getEntityChecker();        return checker.checkEntityExist(entityValue, null);
    }
    
}

對(duì)象存在性檢測集中管理

對(duì)象存在性檢測集中管理

其他精彩文章文章

Android KSOAP2調(diào)用.net webservice

jQuery教程(8)-DOM樹操作之使用反向插入方法

android學(xué)習(xí)筆記(34)使用AlertDialog創(chuàng)建簡單對(duì)話框

android學(xué)習(xí)筆記(33)畫廊視圖(Gallery)的功能和用法

android navidgation drawer 在導(dǎo)航抽屜中如何改變List選中項(xiàng)的...

更多關(guān)于android開發(fā)文章

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。

網(wǎng)站標(biāo)題:對(duì)象存在性檢測集中管理-創(chuàng)新互聯(lián)
當(dāng)前鏈接:http://muchs.cn/article18/dhipgp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站建設(shè)、域名注冊(cè)做網(wǎng)站、ChatGPT、云服務(wù)器微信小程序

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)頁設(shè)計(jì)公司