扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
在大型业务系统中, 常常需要从数据库中查询某个实体对象。 在进行处理之前, 必须先检测该实体是否存在,以增强系统的健壮性。 不过, 检测代码充斥在主业务流程中又会大大降低业务逻辑的清晰性, 最好集中起来进行管理。 因此,编写了一个类来做这个事情, 只需要一行调用就可以完成相应实体对象的检测。
创新互联公司专注于苏州企业网站建设,成都响应式网站建设,成都商城网站开发。苏州网站建设公司,为苏州等地区提供建站服务。全流程按需定制网站,专业设计,全程项目跟踪,创新互联公司专业和态度为您提供的服务美中不足的一点是, 打 log 的位置发生变化了。由于打 log 的主要目标是为了便于调试和定位错误位置, 为了补偿, 一种办法是调用方法时根据具体语境传入自定义的错误消息, 根据错误消息可以定位错误位置; 另一种办法是, 如果不希望每次调用都使用不同的自定义错误消息, 使用 log.error("error", bizEx) 打印异常栈信息, 也可以获取到抛出错误的位置。
NOTE: 为了遵循公司代码的保密性, 隐去导入的包名, 各位读者可以借鉴其思想, 运用到自己的项目中去。
使用方法:
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); } } }
实体存在性集中检测类: CheckEntityExistManager:
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 checkEntityExist(String entityValue, String msg) throws BizException; } private static ICheckEntityExist diskIdChecker = checkEntityMgr.new CheckDiskIdExist(); private static ICheckEntityExist vmNameChecker = checkEntityMgr.new CheckVmExist(); private static ICheckEntityExist 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 errorMap = new HashMap (); 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 { @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 { @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 { @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 throwexOrReturn(T entity, String message, IErrorCode errorCode) throws BizException { if (entity == null) { log.error(message); throw new BizException(errorCode); } return entity; } public static T checkEntity(EntityChecker entityChecker, String entityValue, String customMsg) throws BizException { ICheckEntityExist checker = (ICheckEntityExist ) entityChecker.getEntityChecker(); return checker.checkEntityExist(entityValue, customMsg); } public static T checkEntity(EntityChecker entityChecker, String entityValue) throws BizException { ICheckEntityExist checker = (ICheckEntityExist ) entityChecker.getEntityChecker(); return checker.checkEntityExist(entityValue, null); } }
其他精彩文章文章
更多关于android开发文章
另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流