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);
    }
    }
    如你所见,该方法大大整价了可读性和以后的可维护性。不难看出,该方法的所有可能的路径都会经过验证。 




  • 相关阅读:
    32/64位平台printf uint64的方法
    [Linux 安装]centos安装vmware tools
    【Linux】fg bg ctrl + z jobs & 等命令
    让我们慢慢地彼此遗忘
    ctrl+c,ctrl+d,ctrl+z在linux中意义
    Windows 7 右键菜单 添加命令
    修改vs2010所有工程的include目录和lib目录
    Vmware虚拟机的linux与主机共享
    防止atoi函数内存越界
    JavaScriptSerializer使用条件
  • 原文地址:https://www.cnblogs.com/jgig11/p/5786395.html
Copyright © 2011-2022 走看看