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




  • 相关阅读:
    [STL][C++]MAP
    [原创]南水之源A*(A-Star)算法
    php+mysql模糊查询功能
    php中如何传递Session ID
    初识jsonp
    跨站脚本攻击XSS
    XSS危害——session劫持
    PHP中获取当前页面的完整URL
    smarty获得当前url的方法分享
    表空间的管理方式有哪几种,各有什么优劣?
  • 原文地址:https://www.cnblogs.com/jgig11/p/5786395.html
Copyright © 2011-2022 走看看