• iPhone开发重构:固化条件判断【转】


        无论在iPhone开发还是学习的过程中都会看到一些不是很理想的代码,不可否认自己也在不断“贡献”着这类代码。面对一些代码的“坏味道”,重构显然是 个有效的解决途径。《iPhone开发重构》系列就想总结和补充iPhone开发中经历的一些重构,其间可能会引用一些开源以及实际项目的代码,本着对技 术的探求,冒昧之处还请作者多多见谅。

        在代码实现的过程中经常会遇到这样的情况:有些条件分支的判断中最初还比较简单,但随着需求不断修改以及检查不断细化,分支条件会不断地变复杂,以至于开始影响到主要代码流程。面对这种情况,就应该将分支条件进行提取来实现其固化。重构前后代码如下:

    重构前:

    - (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {
        NSURL *URL = [request URL];
        if ([[URL scheme] isEqualToString:@"about"]) {
            return YES;
        }
        if([[URL host] isEqualToString:@"www.wikihow.com"] &&
                           ![path hasPrefix:@"index.php"] &&
                           ![path hasPrefix:@"Category:"] &&
                           ![path hasPrefix:@"Image:"] &&
                           ![path hasPrefix:@"wikiHow:"] &&
                           ![path hasPrefix:@"Category:"] &&
                           ![path hasPrefix:@"wikiHow_talk:"] &&
                           ![path hasPrefix:@"User:"] &&
                           ![path hasPrefix:@"Special:"];) {
            // Do something here
        }
        return NO;
    }

    其中对URL的判断感觉有点“喧宾夺主”了,以至于影响到了逻辑流程的表现。

    重构后:

    - (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {
        NSURL *URL = [request URL];
        if ([[URL scheme] isEqualToString:@"about"]) {
            return YES;
        }
        if ([URL isWikiHowArticleURL]) {
            // Do something here
        }
        return NO;
    }


     

    - (BOOL)isWikiHowArticleURL {
        NSString *path = [self path];
        return [[self host] isEqualToString:@"www.wikihow.com"] &&
                           ![path hasPrefix:@"index.php"] &&
                           ![path hasPrefix:@"Category:"] &&
                           ![path hasPrefix:@"Image:"] &&
                           ![path hasPrefix:@"wikiHow:"] &&
                           ![path hasPrefix:@"Category:"] &&
                           ![path hasPrefix:@"wikiHow_talk:"] &&
                           ![path hasPrefix:@"User:"] &&
                           ![path hasPrefix:@"Special:"];
    }

       这样URL的判断就封装和固化在了isWikiHowArticleURL函数中。如果项目只有在一处地方使用该函数就可以将其放在当前类;如果有多个地方调用那就应该适当“转移”了,NSString或NSURL的Category都是比较合适的去处。

    本文出自 “林家男孩” 博客,请务必保留此出处http://bj007.blog.51cto.com/1701577/545535

  • 相关阅读:
    使用Jpath 对Json字符串进行解析
    使用PowerDesigner 生成mysql 数据库脚本
    在windows 环境下Kratos 代码示例搭建
    Java jdbc无法连接sql server和sa登录失败的坑
    win10 安装sql server 2008 提示重新启动计算机失败
    RNN计算loss function
    ReLU 函数非线性
    TopK 问题
    mysql初始化问题(版本 8.0.11)
    投资理财的66条军规
  • 原文地址:https://www.cnblogs.com/simonshi2012/p/2269348.html
Copyright © 2020-2023  润新知