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




  • 相关阅读:
    asp.net core 不依赖autofac实现aop
    C# 获取调用者信息
    IIS 命令学习
    Jenkins + PowerShell + .net core 自动打包
    gogs 自定义配置
    搜索文件内容神器:SearchMyFiles
    非常强大的磁盘计算大小工具:TreeSizeFree
    rancher入门教程
    IQueryable 表达式解析学习
    Sql server 入门权威指南
  • 原文地址:https://www.cnblogs.com/jgig11/p/5786395.html
Copyright © 2011-2022 走看看