热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

探讨代码实现中的若干问题

本文基于RobertC.Martin在其著作《清洁代码》第17章中的观点,深入分析了代码实践中常见的‘代码气味’现象,并提出了改进方法实现的具体建议。
Robert C. Martin在《清洁代码》一书的第17章中,介绍了‘代码气味’这一概念,指的是那些虽然未违反任何明确的标准(无论是正式还是非正式的),但却透露出开发者缺乏经验或纪律性的代码特征。这一概念对我启发很大,尤其在我频繁与不同团队合作时,经常遇到这类‘代码气味’,它们不仅增加了代码解读的难度,还严重影响了代码的可维护性。

例如,关于方法参数的数量,Martin建议理想状态是没有参数,但最多不超过三个。这个‘三’是一个经验值,我个人也倾向于遵守这一规则,但在某些特定条件下可能会有所不同。对于已有的大型代码库,直接限制参数数量可能不太现实,不过我有几点建议可以尝试解决这个问题:

1. 如果多个参数来源于同一个对象实例,可以考虑将整个对象作为参数传入,然后在方法内部按需访问其属性。
2. 考虑将该方法直接实现于对象本身,这样就可以避免在方法内部引用外部对象。
3. 对于无法通过简单重构减少参数的情况,特别是当重构风险过高时(如时间紧迫等),可以创建一个临时对象来封装所有必要的属性,然后将这个对象作为单一参数传递给方法,或者将方法实现在这个临时对象上。

另一个常见的‘代码气味’是‘输出参数’的问题,即方法的参数不仅是输入,还会被方法的逻辑修改。这种做法在面向对象编程出现前较为常见,但现在更推荐的做法是利用‘this’关键字作为输出参数。同样,最好的做法是让受影响的对象自身实现该方法。

使用布尔标志参数来指示方法可能执行的两种不同功能也是一个常见问题。更好的解决方案是将逻辑拆分为两个独立的方法,每个方法负责一种情况,这不仅使得方法的命名更具描述性,也使代码更加清晰易懂。如果两种逻辑路径在分叉前有很多共通之处,可以创建第三个方法来处理这部分公共逻辑,同时在其他两个方法中保持各自的特殊逻辑。

此外,作者虽然没有提及,但我认为在方法实现中使用局部变量作为返回值,而不是直接返回对象本身,也是一种良好的实践。比如,在满足特定条件时设置局部变量,并在方法结束时返回该变量,可以使方法的退出点更加明确,提高代码的可读性和可维护性。

最后,值得一提的是‘死函数’的问题,即系统中从未被调用过的函数。版本控制系统存在的意义就在于此——合理利用它,可以有效管理代码变更历史,避免无用代码的累积。
推荐阅读
  • Nibblestutotials.net教程 – Blend  Silverlight1系列之Button Basic
    Basic:createonebutton文中三部分所用资源及代码下载:part1,part2,part3Buttonsbasicpart1:drawingNibbl ... [详细]
  • Java 中SimpleDateFormat 错误用法及改正 ... [详细]
  • 本文介绍了如何在Java中使用`JCheckBoxMenuItem.setMnemonic()`方法,并提供了多个实际应用的代码示例。 ... [详细]
  • 远程访问用户 Kindle通过电子书实现控制
    介绍自2007年以来,亚马逊已售出数千万台Kindle,令人印象深刻。但这也意味着数以千万计的人可能会因为这些Kindle中的软件漏洞而被黑客入侵。他 ... [详细]
  • django项目中使用手机号登录
    本文使用聚合数据的短信接口,需要先获取到申请接口的appkey和模板id项目目录下创建ubtils文件夹,定义返回随机验证码和调取短信接口的函数function.py文件se ... [详细]
  • 本文提供了一个Android应用中用于抓取网页信息并下载图片的示例代码。通过该代码,开发者可以轻松实现从指定URL获取网页内容及其中的图片资源。 ... [详细]
  • 本文详细介绍了在Windows 8操作系统上安装MindManager过程中遇到的问题及解决策略,特别是针对Visual C++ 2005 Redistributable安装错误的处理方法。 ... [详细]
  • 本文详细介绍了Python的multiprocessing模块,该模块不仅支持本地并发操作,还支持远程操作。通过使用multiprocessing模块,开发者可以利用多核处理器的优势,提高程序的执行效率。 ... [详细]
  • 本文介绍如何使用Java实现AC自动机(Aho-Corasick算法),以实现高效的多模式字符串匹配。文章涵盖了Trie树和KMP算法的基础知识,并提供了一个详细的代码示例,包括构建Trie树、设置失败指针以及执行搜索的过程。 ... [详细]
  • 利用Selenium框架解决SSO单点登录接口无法返回Token的问题
    针对接口自动化测试中遇到的SSO单点登录系统不支持通过API接口返回Token的问题,本文提供了一种解决方案,即通过UI自动化工具Selenium模拟用户登录过程,从浏览器的localStorage或sessionStorage中提取Token。 ... [详细]
  • VSCode中实现大型项目函数跳转的方法
    在处理大型代码项目时,简单的C/C++插件往往无法满足需求。本文介绍如何通过配置GNU Global等工具,在VSCode中实现高效的函数跳转。 ... [详细]
  • 搜索引擎架构设计
    本文详细介绍了搜索引擎的主要组成部分,包括爬虫模块、索引模块和搜索模块。其中,索引模块采用了高效的二元分词技术进行数据存储,而搜索模块则基于ASP.NET框架实现了一个用户友好的界面和高效的搜索算法。 ... [详细]
  • 使用EF Core在.Net Core控制台应用中操作SQLite数据库
    本文介绍如何利用Visual Studio 2019和Windows 10环境,通过Entity Framework Core(EF Core)实现对SQLite数据库的读写操作。项目源代码可从百度网盘下载。 ... [详细]
  • 深入理解SAP Fiori及其核心概念
    本文详细介绍了SAP Fiori的基本概念、发展历程、核心特性、应用类型、运行环境以及开发工具等,旨在帮助读者全面了解SAP Fiori的技术框架和应用场景。 ... [详细]
  • C#爬虫Fiddler插件开发自动生成代码
    哈喽^_^一般我们在编写网页爬虫的时候经常会使用到Fiddler这个工具来分析http包,而且通常并不是分析一个包就够了的,所以为了把更多的时间放在分析http包上,自动化生成 ... [详细]
author-avatar
看是语言_263
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有