还在整天写if else ?

缘起

在业务团队写代码,经常会遇到这种情况,产品经理来个需求,好的,我们加个字段,加个if else. 谢晞鸣最近总结了一些比 if else 优雅一点的套路,能够让自己代码的逼格看起来稍微高点。很多时候分支是不可避免的,不同的业务,肯定要走不同的分支,我这里所谓的优雅套路,本质上就是用一个 Map 将 “条件””业务处理逻辑“ 两者映射起来。

这里假设我们的项目是基于Spring的。文章中列的代码是不完整的,说明意思即可。

if else

有这样一种业务场景,我们做保险产品项目,不同产品核保的逻辑是不一样的(对年龄、限额、职业、性别等等的要求都不一样),假设有两个字段, productCategory, productSubCategory 用于区分不同类型的保险(万能险、投连险、养老险、产险等)。我们可以这么写

1
2
3
4
5
if (productCategory.equals("XXX")){
processXXX();
} else if(productCategory.equals("YYY")){
processYYY();
}

优雅的套路

我们也可以设计这样一个结构来处理这种业务,将我们的 ”条件”(即产品类型)“业务处理逻辑”(即核保逻辑) 映射起来, 下面是一个很简单的 demo:

Spring事务管理

最新又重新学习了一遍Spring的事务,这里做点总结,不做如何一步步配置的流水账。

1. 关键类

1
2
3
4
5
6
public interface PlatformTransactionManager {
TransactionStatus getTransaction(
TransactionDefinition definition) throws TransactionException;
void commit(TransactionStatus status) throws TransactionException;
void rollback(TransactionStatus status) throws TransactionException;
}

事务真正的开始、提交、回滚都是通过PlatformTransactionManager这个接口来实现的,例如,我们常用的org.springframework.jdbc.datasource.DataSourceTransactionManager

TransactionDefinition用于获取事务的一些属性,Isolation, PropagationTimeoutRead-only,还定义了事务隔离级别,传播属性等常量。
TransactionStatus用于设置和查询事务的状态,如是否是新事务,是否有保存点,设置和查询RollbackOnly等。