`
zhang_xzhi_xjtu
  • 浏览: 536932 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

实践中的重构18_不对称的美

阅读更多
一般而言,自然界是以对称为美的。但是,在编程的世界里面,不对称的情况比比皆是,一样的美。
常见的api中有如下例子:
    	// String的方法。
	public String substring(int beginIndex, int endIndex)
 	// List的方法。 
	List<E> subList(int fromIndex, int toIndex) 

这里一直遵循着不对称的左闭右开原则。
这种原则有2个显著的优点。
1 计算该范围所包含的数量时,直接endIndex-beginIndex就好了。如果是左闭右闭区间的话,则需要形如endIndex-beginIndex+1的方式来计算。
2 左闭右开区间有良好的叠加性。举个例子,一个[0,100)的范围,自然等于[ 0,10), [10,20),…,[90,100)的叠加。
了解了这种不对称的优点,那么我们设计接口的时候,应该尽量遵循左闭右开原则。
	/**
	 * 查找在一定时间范围内加入系统的用户。包含start时间点,不包含end时间点。
	 * */
	public List<User> findUser(Date start, Date end)

再看一个例子:
	public static final String FILE_SEPARATOR = File.separator;

	private String baseDir;

	public String getFileDir(String userId, String date) {
		String relativePath = getDateDir(date) + getUserDir(userId);
		return getBaseDir() + FILE_SEPARATOR + relativePath;
	}

	private String getUserDir(String userId) {
		return FILE_SEPARATOR + userId + FILE_SEPARATOR;
	}

	private String getDateDir(String date) {
		return date + FILE_SEPARATOR + date;
	}

	private String getBaseDir() {
		return baseDir;
	}

这段代码的功能是构建一个用户在特定日期的文件路径目录。该文件路径目录由三部分组成,baseDir是配置的根目录,日期目录是根据日期所得到的目录,用户目录是根据用户id得到的目录。
在写这段代码的过程中,很明显没有考虑separator和目录的关系,导致各个子目录风格不统一,每次使用类的方法时都要仔细的检查该目录是不是以separator结尾,以防出错。
很明显,使用不对称的原则可以很好的解决该问题,可以规定所有子目录都以separator开头,但是不以separator结尾。
重构后代码如下:
	public static final String FILE_SEPARATOR = File.separator;

	private String baseDir;

	public String getFileDir(String userId, String date) {
		return getBaseDir() + getDateDir(date) + getUserDir(userId);
	}

	private String getUserDir(String userId) {
		return FILE_SEPARATOR + userId;
	}

	private String getDateDir(String date) {
		return FILE_SEPARATOR + date + FILE_SEPARATOR + date;
	}

	private String getBaseDir() {
		return baseDir;
	}

当然,这里getFileDir没有了separator结尾,需要修改使用到该方法的地方。
做了该重构以后,所有子目录的格式变为统一的,方便记忆和使用,并且极大的简化了目录拼接问题,由于separator不对称的使用,现在目录的拼接只需要简单的使用子目录拼接即可,不用关心separator的问题了。
分享到:
评论
1 楼 houfeng0923 2011-02-28  
受教了。。。

相关推荐

    双臂对称性对压缩传感用于关联成像重构的影响.pdf

    如果双臂不对称,可能会导致数据采集的不均衡,进而影响重构图像的质量。因此,优化双臂对称性是提高压缩传感在关联成像应用中性能的关键。 这篇论文的贡献在于揭示了双臂对称性对压缩传感重构效果的具体影响,并...

    信息经济学视角下生鲜农产品电商的模式重构.pdf

    生鲜农产品电商平台在信息经济学视角下进行模式重构,主要目的是解决信息不对称问题、质量信息传递有限性、供应链质量信息“黑箱”效应,以及质量信息甄别机制不健全等问题。在此背景下,研究者提出了从生产、流通到...

    互联网生态时代:传统商业模式与社会系统的颠覆与重构.pdf

    9. 互联网技术的全方位渗透使得产业边界越来越模糊,传统基于信息不对称的商业模式逐步边缘化,信息的公开透明推动了产业内部的结构分化和跨界重组。 10. 大数据、人工智能的快速发展,以及深度学习和强化学习算法...

    期刊同行评议中参与者基于区块链技术的科技关系重构.pdf

    2. 信息不对称:作者无法获取审稿专家的身份和资格信息,评审过程对外保密,增加了不信任感。 3. 评价不交互:审稿结果通常是单向决定,作者在评审后很难有机会申诉或提供反馈。 面对这些挑战,区块链技术的引入为...

    基于MATLAB与Sym4小波的测井曲线重构与火成岩反演应用.pdf

    文件所提及的声波曲线重构与火成岩反演应用即为利用MATLAB在地震勘探领域中的具体实践案例。 2. 小波变换 小波变换是一种在信号处理中广泛使用的数学变换方法,它能够对信号进行时频分析,得到信号在不同尺度上的...

    “互联网”背景下企业招聘模式重构.pptx

    互联网背景下的企业招聘模式重构已经在很多企业中得到了实践。例如,一些大型科技公司利用大数据分析,对求职者进行精准匹配和推荐,实现了高效的招聘。还有一些企业通过远程面试和在线测评,打破了地域限制,从全球...

    解构跨境电商底层代码重构.pdf

    其次,书中提到,跨境电商的发展背景是信息不对称的消除和消费者权力的转移。互联网时代,消费者拥有了更多的信息获取渠道,从而影响了商品定价权,制造商得以直接面对终端用户,推动了跨境电商的繁荣。而物流、支付...

    20160607-东北证券-传化股份-002010-深度之一:重构货运信用体系,打造OTO新生态.rar

    传统的货运模式可能存在信息不对称、信任缺失等问题,这可能导致运输过程中的各种风险,如货物丢失、延迟交付、费用争议等。因此,重构货运信用体系旨在解决这些问题,通过建立有效的信用评价机制,提高各方参与者...

    商贸零售行业周报盒马改革零供关系,利好行业秩序重构.rar

    在传统的商贸零售模式中,供应商和零售商之间的关系往往存在信息不对称、利益分配不均等问题,导致供应链效率低下,成本高昂。随着消费者需求的多元化和互联网技术的发展,这种传统模式逐渐显现出局限性。盒马鲜生的...

    人工智能驱动供应链变革平台重构、生态重塑与优势重建.pptx

    人工智能技术的应用打破了传统供应链的信息不对称和利益冲突局面。企业之间建立了更加紧密的合作关系,实现了信息共享和资源优化配置。通过人工智能技术,企业可以更好地理解客户需求,优化产品设计,降低成本并提高...

    C_C++ Wavelet小波分析之一维小波分解与重构

    资源中提到的C++代码函数与MATLAB中的小波函数保持一致,这意味着开发者可以在不熟悉MATLAB的情况下,利用已有的MATLAB知识来理解和使用这些C++代码。这对于跨平台开发或者需要高效计算的场景非常有利。 总的来说,...

    行业分类-设备装置-三角形连接变流器电流瞬时序分量分解和重构方法.zip

    综上所述,三角形连接变流器电流瞬时序分量的分解和重构是电力电子技术中的重要研究内容,它涉及到电力系统的稳定性、控制策略和故障诊断等多个方面。掌握这一技术对于理解和设计高性能的电力转换系统至关重要。通过...

    Antipatterns 英文版 (pdf)

    - **沟通不畅**:缺乏有效的沟通机制会导致信息不对称,进而引发各种误解和冲突。 - **资源分配不当**:未能合理规划和分配资源可能会导致某些关键任务得不到足够支持,影响整个项目的进度。 - **需求变更频繁**...

    腾讯汽车中心总经理王秋凤:以互联网重构腾讯汽车运营体系.pdf

    互联网使得车企和消费者之间的信息不对称性减少,消费者对汽车信息的获取渠道更为多样化,对汽车营销的效率和方式提出了新的要求。 二、王秋凤的领导作用 王秋凤的加入为腾讯汽车带来新的发展方向和领导策略。她...

    新北师大三年级下册数学轴对称二教学PPT课件.pptx

    新知探究环节,学生将面对一系列轴对称图形的一半,被要求想象并重构完整的图形。这是一种培养空间想象能力的活动,有助于学生理解轴对称图形的特点:沿一条直线折叠后,图形的两边能够完全重合。在这个过程中,教师...

    使用TCSR具有可重构陷波带的超宽带带通滤波器

    在滤波器设计方法中,有三种主要的技术类别用于实现陷波带设计:引入附加的陷波谐振器[1,2]、嵌入式开路枝节[3]以及不对称耦合馈线[4,5]。这些技术可以帮助设计者根据不同的应用场景和要求,调整滤波器的频率响应,...

    MTM.rar_mtm-svd

    综上所述,"MTM.rar_mtm-svd"这个标题涵盖了Java Hibernate 3.3框架下多对多映射的实践和SVD在数据处理中的应用。理解和掌握这些知识点对于提升Java Web开发和数据分析能力至关重要。在实际项目中,多对多映射能有效...

    CompressiveSensing-master_operation_ImageEncryption_源码.zip

    总的来说,这个压缩包中的源代码可能涵盖了从理论到实践的多个方面,包括压缩感知的数学基础、图像处理的算法实现、加密解密的策略以及软件工程的最佳实践。对于想学习这些领域的开发者来说,这是一个宝贵的资源。

    L1正则化问题的分裂Bregman方法.pdf

    在这些应用中,Bregman迭代算法可以应用于求解由压缩感知理论所引导出的L1正则化问题,帮助从较少的数据中重构出高质量的图像。 在理解和应用Bregman迭代算法和L1正则化问题时,有几个关键技术点需要掌握: 1. 凸...

Global site tag (gtag.js) - Google Analytics