时间:2021-07-01 10:21:17 帮助过:2人阅读
manager层:改成将配合缓存进行数据库的读写操作。
我的做法
insert:
insertDB(something) //直接操作db
query:
something = getSomethingFromCache //首先读缓存,不存在时读db
if(something == NULL) {
something = getSomethingFromDB
putSomethingToDB(something)
}
return something
update:
updateDB(something) //更新db,同时失效缓存中 脏数据
invalidCache(something)
delete:
deleteDB(something) //删除db中数据,同时失效缓存中 脏数据
invalidCache(something)
该层发生异常时,对外抛出,不曾不作处理。我之前的做法,在该层多异常作处理,如发生异常时 我就返回null, 这样的弊端在于 调用方对null无法做进一步的区分(是发生异常 还是 db与缓存中 均不存在 导致返回null),从而使容错性能下降,例如如果能是异常导致的,则可以进行多次尝试,而当数据不存在时,就需要立即返回作处理了。毕竟manager层相对来说层级较低,说要向上层调用方提供尽可能多的信息,方便做容错等错里。
service层:在该层常常会根据业务的需要做多表的事务操作。
update:
doInTransaction(TransactionStatus status) {
try {
Long tableId1 = table1.insert(something1);
Long tableId2 = table2.insert(something2);
} catch (Exception e) {
status.setRollbackOnly();
}
}
该层发生异常时,常常会根据业务需求作转换,例如对于查询失败操作,可以将失败的具体信息一并返回调用方,便于问题排查。
queryResult.isSuccess = false;
queryResult.msg = “db error”;
queryResult.msg = “不存在”;
数据库操作分层结构总结
标签: