zoukankan      html  css  js  c++  java
  • 重构24-Remove Arrowhead Antipattern(去掉箭头反模式)

    基于c2的wiki条目。Los Techies的Chris Missal同样也些了一篇关于反模式的post。 
    简单地说,当你使用大量的嵌套条件判断时,形成了箭头型的代码,这就是箭头反模式(arrowhead antipattern)。我经常在不同的代码库中看到这种现象,这提高了代码的圈复杂度(cyclomatic complexity)。 下面的例子演示了箭头反模式
    public class Security {
    public ISecurityChecker SecurityChecker;//getter setter

    public Security(ISecurityChecker securityChecker) {
    SecurityChecker = securityChecker;
    }

    public Boolean HasAccess(User user, Permission permission, List<Permission> exemptions) {
    Boolean hasPermission = false;
    if (user != null) {
    if (permission != null) {
    if (exemptions.size() == 0) {
    if (SecurityChecker.CheckPermission(user, permission) || exemptions.contains(permission)) {
    hasPermission = true;
    }
    }
    }
    }
    return hasPermission;
    }
    }
    移除箭头反模式的重构和封装条件判断一样简单。这种方式的重构在方法执行之前往往会评估各个条件,这有点类似于契约式设计验证。下面是重构之后的代码:
    public class Security {
    public ISecurityChecker SecurityChecker;//getter setter

    public Security(ISecurityChecker securityChecker) {
    SecurityChecker = securityChecker;
    }
    public Boolean HasAccess(User user, Permission permission, List<Permission> exemptions) {
    if (user == null || permission == null){
    return false;
    }
    if (exemptions.contains(permission)){
    return true;
    }
    return SecurityChecker.CheckPermission(user, permission);
    }
    }
    如你所见,该方法大大整价了可读性和以后的可维护性。不难看出,该方法的所有可能的路径都会经过验证。 




  • 相关阅读:
    10 个雷人的注释,就怕你不敢用!
    Java 14 之模式匹配,非常赞的一个新特性!
    poj 3661 Running(区间dp)
    LightOJ
    hdu 5540 Secrete Master Plan(水)
    hdu 5584 LCM Walk(数学推导公式,规律)
    hdu 5583 Kingdom of Black and White(模拟,技巧)
    hdu 5578 Friendship of Frog(multiset的应用)
    hdu 5586 Sum(dp+技巧)
    hdu 5585 Numbers
  • 原文地址:https://www.cnblogs.com/jgig11/p/5786395.html
Copyright © 2011-2022 走看看