`
380071587
  • 浏览: 480066 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

31天重构学习笔记24. 分解复杂判断

 
阅读更多

摘要:由于最近在做重构的项目,所以对重构又重新进行了一遍学习和整理,对31天重构最早接触是在2009年10月份,由于当时没有订阅Sean Chambers的blog,所以是在国外的社区上闲逛的时候链接过去的。记得当时一口气看完了整个系列并没有多少感觉,因为这些基本上项目都在使用,只是我们没有专门把它标示和整理出来,所以也没有引起多大的重视。现在突然接手这个重构项目,由于团队成员技术和经验参差不齐,所以有必要专门整理一个重构的纲要,当然这个系列也非常适合做新系统的代码规范参考,只要有代码的地方,这个重构规范就很有价值。周末也不想出去闲逛,因为在刚到这个美丽的城市,没有亲戚或者朋友,所以才能静下心来两天时间写完这个重构参考规范。同时也感受了Windows Live writer写文章的快感。当然重构的整体架构得另当别论(整体架构在我的这篇文章有专门的讲解(http://www.cnblogs.com/zenghongliang/archive/2010/06/23/1763438.html)。大的架构设计好了以后,这些重构细节点就成了东风之后的大火,对整个项目也是至关重要。31天重构这个系列和《代码大全》、《重构:改善既有代码的设计》比较起来最大的特点就是比较简单、浅显易懂。那么我这些文章也都是学习Sean Chambers的31天重构的笔记整理,所以如果大家对这个笔记有任何异议也可以指出。

具体也可以通过http://www.lostechies.com/blogs/sean_chambers/archive/2009/07/31/31-days-of-refactoring.aspx查看原文。

概念:本文中的”分解复杂判断”是指把原来复杂的条件判断等语句用尽快返回等方式简化代码。

正文:简单的来说,当你的代码中有很深的嵌套条件时,花括号就会在代码中形成一个长长的箭头。我们经常在不同的代码中看到这种情况,并且这种情况也会扰乱代码的可读性。

如下代码所示,HasAccess方法里面包含一些嵌套条件,如果再加一些条件或者增加复杂度,那么代码就很可能出现几个问题:1,可读性差。 2,很容易出现异常。 3,性能较差。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace LosTechies.DaysOfRefactoring.SampleCode.ArrowheadAntipattern.Before
{
public class Security
{
public ISecurityChecker SecurityChecker { get; set; }

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

public bool HasAccess(User user, Permission permission, IEnumerable<Permission> exemptions)
{
bool hasPermission = false;

if (user != null)
{
if (permission != null)
{
if (exemptions.Count() == 0)
{
if (SecurityChecker.CheckPermission(user, permission) || exemptions.Contains(permission))
{
hasPermission = true;
}
}
}
}

return hasPermission;
}
}
}

那么重构上面的代码也很简单,如果有可能的话,尽量将条件从方法中移除,我们让代码在做处理任务之前先检查条件,如果条件不满足就尽快返回,不继续执行。下面是重构后的代码:

using System.Collections.Generic;
using System.Linq;

namespace LosTechies.DaysOfRefactoring.SampleCode.ArrowheadAntipattern.After
{
public class Security
{
public ISecurityChecker SecurityChecker { get; set; }

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

public bool HasAccess(User user, Permission permission, IEnumerable<Permission> exemptions)
{
if (user == null || permission == null)
return false;

if (exemptions.Contains(permission))
return true;

return SecurityChecker.CheckPermission(user, permission);
}
}
}

总结:这个重构很重要,它和后面讲的”尽快返回“有些类似,我们在做复杂的处理过程时,要经常考虑这个重构,用好了它,会对我们的帮助很大。

分享到:
评论

相关推荐

    [免费高清PDF]31天重构系列笔记.rar

    《31天重构系列笔记》是一本专注于C#编程语言重构技术的教程,该资源以免费高清PDF的形式提供。重构是软件开发过程中的一种重要实践,它旨在改进代码结构,提高可读性和可维护性,而不会改变外部行为。在31天的时间...

    31天重构学习笔记.docx

    本文主要讨论了如何通过重构来优化代码,避免将集合的全部操作暴露给调用者,以提高代码的安全性和可维护性。 在原始代码中,`Order` 类公开了一个 `IList&lt;OrderLine&gt;` 类型的属性 `OrderLines`,这允许外部代码对...

    31天重构学习笔记中文版

    通过对以上案例的学习,我们不仅了解了重构的基本原则和实践方法,还深入探讨了如何通过具体的编码技巧来提高代码质量和系统的整体性能。这些知识对于每一位软件工程师而言都是非常宝贵的,无论是初学者还是资深...

    二维多尺度塔式分解与重构的matlab实现.pdf

    【二维多尺度塔式分解与重构】是一种基于小波理论的信号或图像处理技术,它在MATLAB环境中得到了广泛应用。这种技术主要利用了Haar小波的特性,Haar小波是最早被发现的一类正交小波,具有简单的结构和良好的局部化...

    小波分析:8 一维小波包的分解和重构深入学习程序.zip

    在本资料包“小波分析:8 一维小波包的分解和重构深入学习程序.zip”中,我们将深入探讨一维小波包的分解与重构过程,这将帮助我们理解如何利用小波分析来提取数据中的关键信息。 一维小波包分解是将原始信号通过一...

    计算机行业AIGC投资机会梳理:ChatGPT快速流行,重构AI商业模式.zip

    计算机行业AIGC投资机会梳理:ChatGPT快速流行,重构AI商业模式.zip计算机行业AIGC投资机会梳理:ChatGPT快速流行,重构AI商业模式.zip计算机行业AIGC投资机会梳理:ChatGPT快速流行,重构AI商业模式.zip计算机行业...

    小波db4分解与重构.zip

    四层分解,低频重构小波db4分解与重构.zip 小波db4分解与重构,四层分解,低频重构小波db4分解与重构.zip 小波db4分解与重构,四层分解,低频重构小波db4分解与重构.zip 小波db4分解与重构,四层分解,低频重构小波...

    Piranha过时代码自动重构工具 v0.3.24.zip

    Piranha是一款专注于过时代码自动重构的工具,版本号为v0.3.24。在软件开发过程中,随着时间的推移,代码可能会变得过时,不适应新的需求或技术发展,此时,重构就显得尤为重要。Piranha的出现,为开发者提供了一种...

    31天重构速成

    ### 31天重构速成:重要重构技巧详解 #### 一、简介 重构作为软件开发过程中的一个重要环节,旨在不改变程序外部行为的前提下优化其内部结构,从而提高代码的可读性和可维护性。本篇文章将根据《31天重构速成》这...

    Matlab小波分解和重构算法-db2.m

    Matlab小波分解和重构算法-db2.m 这是我自编的一个小波分解和重构的程序。重构部分就没有画出近似部分和细节部分的频谱图了。跟分解过程是相反的过程。 运行结果: Figure15.jpg 小波分解和...

    论文研究-离散空间中正交小波分解重构算法的实现.pdf

    针对目前离散空间中分解重构算法的过程较为复杂, 主要研究离散空间中周期小波和非周期小波分解重构算法的实现。首先证明离散空间中的多层小波分解重构算法可以按照Mallat分解重构算法的塔式结构实现, 从而将离散序列...

    20 一维小波包的分解和重构深入学习程序.zip

    这个压缩包文件"20 一维小波包的分解和重构深入学习程序.zip"很可能包含了用于教学或实践的一系列程序,帮助用户深入理解小波包理论并进行实际操作。 一维小波包分解是基于小波分析的一种扩展,它通过多分辨率分析...

    课程设计-基于知识图谱的应天门遗址数字重构展示平台源码.zip

    课程设计-基于知识图谱的应天门遗址数字重构展示平台源码.zip课程设计-基于知识图谱的应天门遗址数字重构展示平台源码.zip课程设计-基于知识图谱的应天门遗址数字重构展示平台源码.zip课程设计-基于知识图谱的应天门...

    emd.rar_emd信号重构_emd分解重构_emd重构_经验模态分解

    EMD由Nasa的科学家Hilbert和Huang在1998年提出,其核心思想是将复杂的信号自适应地分解为一系列简单、具有内在物理意义的局部特征模态,这些模态被称为希尔伯特-黄内在模态函数(Hilbert-Huang Intrinsic Mode ...

    重构.part2.rar(Martin Flower)

    Martin Flower 写的经典书籍。介绍如何对c++,java进行重构的书籍 &lt;br&gt;共有四个文件: 重构.part4.rar 重构.part3.rar 重构.part2.rar 重构.part1.rar

    31天重构速成_中文版.pdf

    通过学习《31天重构速成》中的各种技巧,开发者可以逐步提升自己的重构能力,从而使代码更加健壮、优雅。以上是对《31天重构速成》中提到的主要知识点的详细解释,希望能够对学习重构的朋友有所帮助。

    用于信号的EMD、EEMD、VMD分解_vmd重构_故障诊断emd_故障诊断_故障重构_VMD信号重构_源码.rar.rar

    标题中的“用于信号的EMD、EEMD、VMD分解_vmd重构_故障诊断emd_故障诊断_故障重构_VMD信号重构_源码.rar.rar”揭示了该压缩包文件包含的是与信号处理相关的源代码,特别是涉及了三种重要的信号分解方法:Empirical ...

    重构.part3.rar(Martin Flower)

    Martin Flower 写的经典书籍。介绍如何对c++,java进行重构的书籍 &lt;br&gt;共有四个文件: 重构.part4.rar 重构.part3.rar 重构.part2.rar 重构.part1.rar

    【EMD重构】.rar_EMD重构函数_IMF变量重构_tomorrowi4n_模态分解_重构

    标题中的"【EMD重构】.rar"指的是包含EMD重构过程的压缩文件,而"EMD重构函数"是指在处理EMD分解后的IMF分量时使用的特定函数。"IMF变量重构"则是指将分解得到的各个IMF重新组合成原始信号的过程。"tomorrowi4n"可能...

    《重构商业:产业互联网时代的商业模式重构》读书笔记模板.pptx

    《重构商业:产业互联网时代的商业模式重构》读书笔记模板.pptx

Global site tag (gtag.js) - Google Analytics