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

代码可维护性的神秘面纱

本文来自DZone,作者MattDuVall是一名软件工程师,他在此分享可维护性在软件开发里的重要性。所谓软件的可维护性其实说简单了就是软件代码的可被修

本文来自DZone,作者Matt DuVall是一名软件工程师,他在此分享可维护性在软件开发里的重要性。所谓软件的可维护性其实说简单了就是软件代码的可被修改的容易程度。为了适应新环境、满足新需求,只有对当初的设计初衷进行修改;在这个修改过程里,只有考虑到提高代码的可维护性,才能更好适应软件演化。

每一次代码评审的时候都会考虑到:从长远角度来看,这些代码都是可维护的吗?对于这一问题,估计任何一个开发者的反应都是很敏感的。当开发者A想要在代码库里添加一个比较重要的组件的时候,开发者B经常会半信半疑的关心道:有没有考虑到它的可维护性?必须要谨慎行事!

对于开发者来说,可维护性到底意味着什么?是为了让别人能读懂这些代码?保证让别人看得懂代码
只是可读性而已;如果要考虑到可读性,那么只能说可读性在整个开发过程算是有效地可维护性因素之一。对可维护性更恰当的解释往往需要考虑到可扩展性、抽象性和更高层次的设计以及架构等方方面面。这可能会引起很多误解,为什么我们写软件。软件的存是为了驱动业务需要,增加商业价值,最终的目标是产生收入。废话不多说,先来讲述一下可维护性几大要素吧!

可扩展性

如果讨论到可扩展性的时候需要深入探讨抽象的设计模式和编程语言的话,那么最好是后退一步,对项目的目的进行重新评估。这无异于在一个可能会花费1年、5年或10年的项目上进行跟踪评估,除非开发者有预见未来的能力,知道未来的软件特征集是什么样子——那样就不必煞费苦心花太长的时间进行跟踪测试了。专注于当前具体的代码编写,并即时解决眼前的问题。同时,不要在模糊不清、过于抽象的问题上花太多的时间。

抽象化

不可维护代码出现的迹象是代码库有漏洞,或者是根本不存在抽象,这样就使得其它区域的代码库在工作当中缺少娱乐性。这是真实存在的情况。如果现有的抽象感被破坏了,就必须立即修复。然而,抽象化在商业里也可能成为职业危害因素——为了抽象化而抽象化。所以,开发者需花时间试着去理解被提出来的是什么建议,建议的主旨是什么,并研究一下这样做是否对目前的代码库有意义;取3-4个实例来证明一下抽象是否在这个项目里有用,如果没有用的话就放弃之前提出的建议。Rails社区已经采用了PDI(请做调查)方法,当引入抽象层的时候可以利用PDI来观察看它是否有意义。

高等级设计

总有人会生拉硬拽将设计模式塞到一个组件里,以此来进入到代码库。可维护性的典型问题是“高等级设计”,同时开发者会为了自身的需要尽量和当前的问题撇清关系,但最终还是会专注于抽象化和模糊性。这些设计原则需要对当下的软件开发有意义。在开发前应该具体说明:更好的Web开发目的是为了让我们在长期生活里有更好的条件。  

这并不是对抽象、可扩展性、或软件设计的批评——这些想法都是软件开发、Web开发领域的核心思想。能够帮助开发者创建出更好、更强大的软件。它们不应该被放在可维护性的背面,如果将这些原则用在猜测工作上是绝对不利于创造出好的软件。                                                       (校审/付江)

原文:Matt Duvall

 

转:https://www.cnblogs.com/wala-wo/p/5119290.html



推荐阅读
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • 本文比较了eBPF和WebAssembly作为云原生VM的特点和应用领域。eBPF作为运行在Linux内核中的轻量级代码执行沙箱,适用于网络或安全相关的任务;而WebAssembly作为图灵完备的语言,在商业应用中具有优势。同时,介绍了WebAssembly在Linux内核中运行的尝试以及基于LLVM的云原生WebAssembly编译器WasmEdge Runtime的案例,展示了WebAssembly作为原生应用程序的潜力。 ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • 如何用UE4制作2D游戏文档——计算篇
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ... [详细]
  • Voicewo在线语音识别转换jQuery插件的特点和示例
    本文介绍了一款名为Voicewo的在线语音识别转换jQuery插件,该插件具有快速、架构、风格、扩展和兼容等特点,适合在互联网应用中使用。同时还提供了一个快速示例供开发人员参考。 ... [详细]
  • 【MEGA DEAL】Ruby on Rails编码训练营(97%折扣)限时特惠!
    本文介绍了JCG Deals商店提供的Ruby on Rails编码训练营的超值优惠活动,现在只需29美元即可获得,原价为$1,296。Ruby on Rails是一种用于Web开发的编程语言,即使没有编程或网页设计经验,也能在几分钟内构建专业的网站。该训练营共有6门课程,包括使用Ruby on Rails进行BDD的课程,使用RSpec 3和Capybara等。限时特惠,机会难得,赶快行动吧! ... [详细]
  • Google Play推出全新的应用内评价API,帮助开发者获取更多优质用户反馈。用户每天在Google Play上发表数百万条评论,这有助于开发者了解用户喜好和改进需求。开发者可以选择在适当的时间请求用户撰写评论,以获得全面而有用的反馈。全新应用内评价功能让用户无需返回应用详情页面即可发表评论,提升用户体验。 ... [详细]
  • Webmin远程命令执行漏洞复现及防护方法
    本文介绍了Webmin远程命令执行漏洞CVE-2019-15107的漏洞详情和复现方法,同时提供了防护方法。漏洞存在于Webmin的找回密码页面中,攻击者无需权限即可注入命令并执行任意系统命令。文章还提供了相关参考链接和搭建靶场的步骤。此外,还指出了参考链接中的数据包不准确的问题,并解释了漏洞触发的条件。最后,给出了防护方法以避免受到该漏洞的攻击。 ... [详细]
  • 本文介绍了在Windows环境下如何配置php+apache环境,包括下载php7和apache2.4、安装vc2015运行时环境、启动php7和apache2.4等步骤。希望对需要搭建php7环境的读者有一定的参考价值。摘要长度为169字。 ... [详细]
  • flowable工作流 流程变量_信也科技工作流平台的技术实践
    1背景随着公司业务发展及内部业务流程诉求的增长,目前信息化系统不能够很好满足期望,主要体现如下:目前OA流程引擎无法满足企业特定业务流程需求,且移动端体 ... [详细]
  • Oracle优化新常态的五大禁止及其性能隐患
    本文介绍了Oracle优化新常态中的五大禁止措施,包括禁止外键、禁止视图、禁止触发器、禁止存储过程和禁止JOB,并分析了这些禁止措施可能带来的性能隐患。文章还讨论了这些禁止措施在C/S架构和B/S架构中的不同应用情况,并提出了解决方案。 ... [详细]
  • 本文介绍了绕过WAF的XSS检测机制的方法,包括确定payload结构、测试和混淆。同时提出了一种构建XSS payload的方法,该payload与安全机制使用的正则表达式不匹配。通过清理用户输入、转义输出、使用文档对象模型(DOM)接收器和源、实施适当的跨域资源共享(CORS)策略和其他安全策略,可以有效阻止XSS漏洞。但是,WAF或自定义过滤器仍然被广泛使用来增加安全性。本文的方法可以绕过这种安全机制,构建与正则表达式不匹配的XSS payload。 ... [详细]
  • 小程序自动授权和手动接入的方式及操作步骤
    本文介绍了小程序支持的两种接入方式:自动授权和手动接入,并详细说明了它们的操作步骤。同时还介绍了如何在两种方式之间切换,以及手动接入后如何下载代码包和提交审核。 ... [详细]
  • 本文介绍了响应式页面的概念和实现方式,包括针对不同终端制作特定页面和制作一个页面适应不同终端的显示。分析了两种实现方式的优缺点,提出了选择方案的建议。同时,对于响应式页面的需求和背景进行了讨论,解释了为什么需要响应式页面。 ... [详细]
  • JavaScript设计模式之策略模式(Strategy Pattern)的优势及应用
    本文介绍了JavaScript设计模式之策略模式(Strategy Pattern)的定义和优势,策略模式可以避免代码中的多重判断条件,体现了开放-封闭原则。同时,策略模式的应用可以使系统的算法重复利用,避免复制粘贴。然而,策略模式也会增加策略类的数量,违反最少知识原则,需要了解各种策略类才能更好地应用于业务中。本文还以员工年终奖的计算为例,说明了策略模式的应用场景和实现方式。 ... [详细]
author-avatar
QX封面精选
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有