闽公网安备 35020302035485号
public Order getOrderInfo(String id){
Order order = orderService.getOrder(id);
if (Objects.nonNull(order)){
UserInfo userInfo = userService.getUserInfo(order.getUserId());
if (Objects.nonNull(userInfo)){
Account account = accountService.getAccount(userInfo.getAccountId());
if (Objects.nonNull(account)) {
order.setAccountName(account.getAccountName());
}
}
}
return order;
}
我们可以改成这样:看起来是不是清爽多了public Order getOrderInfo(String id) {
// 堆代码 duidaima.com
Order order = orderService.getOrder(id);
if (Objects.isNull(order)) {
return null;
}
UserInfo userInfo = userService.getUserInfo(order.getUserId());
if (Objects.isNull(userInfo)) {
return order;
}
Account account = accountService.getAccount(userInfo.getAccountId());
if (Objects.nonNull(account)) {
order.setAccountName(account.getAccountName());
}
return order;
}
三.多使用空指针判断,能避免绝大数程序问题原因:
1.省去外部的空对象判断逻辑
2.里面比较逻辑性能更高// 堆代码 duidaima.com
public static boolean equals(CharSequence cs1, CharSequence cs2) {
if (cs1 == cs2) {
return true;
} else if (cs1 != null && cs2 != null) {
if (cs1.length() != cs2.length()) {
return false;
} else if (cs1 instanceof String && cs2 instanceof String) {
return cs1.equals(cs2);
} else {
int length = cs1.length();
for(int i = 0; i < length; ++i) {
if (cs1.charAt(i) != cs2.charAt(i)) {
return false;
}
}
return true;
}
} else {
return false;
}
}
五.如果if条件太复杂,建议抽成方法,去判断,或者定义一个变量if(a!=null && b && c.equals("sss") && d && e){
do something...
}
上面的代码可以抽成这样boolean flag = a!=null && b && c.equals("sss") && d && e;
if(flag){
do something...
}
六.如果有大量if else 出现,可以考虑使用策略模式,仅适用于if里面的代码很多或复杂,不要滥用public interface OrderStrategy {
void doSomething();
String getType();
}
.定义不同的策略实现策略接口// 堆代码 duidaima.com
public class JdOrderStrategy implements OrderStrategy{
@Override
public void doSomething() {
}
@Override
public String getType() {
return "jd";
}
}
public class PddOrderStrategy implements OrderStrategy{
@Override
public void doSomething() {
}
@Override
public String getType() {
return "pdd";
}
}
public class TbOrderStrategy implements OrderStrategy{
@Override
public void doSomething() {
}
@Override
public String getType() {
return "tb";
}
}
.创建一个helper 去装载这些策略@Service
public class OrderStrategyHelper {
private Map<String, OrderStrategy> orderStrategyMap;
@Autowired
public void setOrderStrategyMap(List<OrderStrategy> orderStrategyList) {
if (CollectionUtils.isEmpty(orderStrategyList)) {
throw new RuntimeException("没找到订单策略");
}
orderStrategyMap = orderStrategyList.stream().collect(Collectors.toMap(item -> item.getType(), item -> item, (v1, v2) -> v1));
}
public OrderStrategy getHandler(String type){
return orderStrategyMap.get(type);
}
}
如何去用orderStrategyHelper.getHandler("jd")
七.如果有大量类型判断,建议将类型定义为枚举,便于维护