介绍

每个人都知道重构的含义 敏捷编程的基础,以及不断提高代码质量的最佳途径。 但是重构并不总是相同的,可以定义两个不同的类别:

  • 代码重构
  • 架构重构

代码重构与体系结构重构

过去几年开始使用“ 体系结构重构 ”一词,使人们对其含义以及与代码重构的区别感到困惑。 有人可能会说没有区别,因为在重构体系结构时总是在代码级别进行重构。 因此,让我们尝试定义这两种类型并关注差异:

  • 代码重构的目的是在不改变其行为的情况下修改代码,其主要目的是提高整体软件质量 。 一个重构通常是一个小任务 ,但是应用于代码的多个重构可以大大提高其质量。 已经写了几本关于代码气味重构模式的书 。 最终,它存在能够检测代码气味 (FindBugs,PMD,CheckStyle)甚至进行自动重构 (NetBeans IDE)的自动工具。
  • 架构重构旨在改变软件架构,将现有代码重组为新的逻辑层,其主要范围是提高整体软件质量超越架构/基础架构限制 ,这些限制至关重要地挖掘系统质量,例如可伸缩性,可扩展性,可扩展性,可测试性和实际解决方案系统的稳定性 。 这种重构的主要挑战是试图重用尽可能多的现有代码,以避免编写新软件。 使用自动工具几乎没有帮助(也许只是检测循环依赖),在这里,大多数工作将来自您的大脑和经验。

那么区别是什么呢? 重构代码时,我们会更改代码的编写方式,重构架构时,我们会更改代码在逻辑层和组件中的组织方式。

为了更好地描述差异,我将重点关注以下方面:

  • 项目管理
  • 发展管理
  • 文献资料
  • 实施环境

项目管理

从项目管理的角度来看,差异很大。 由于相关的风险较低且影响可以轻松控制和验证,因此代码重构通常在开发团队的范围内达成共识。

显然,对于架构重构而言,它是不一样的! 必须与管理层达成协议才能启动任务,因为可以提高任务的相关风险成本 。 跟您的经理交谈时该做什么和不该做什么的清单:

  • 在进行任何讨论之前都要做一个高水平的计划,您必须对工作有个了解
  • 列出针对实际限制的可实现的改进
  • 尝试通过可量化的指标来确定投资回报率(取决于项目,但最常见的是金钱)
  • 如果重构太大,请提出迁移计划
  • 创建一个小团队,在重新访问体系结构时不容易让两个以上的人同时工作(至少在开始时)
  • 永远不要说实际版本不好!

发展管理

代码重构是任何开发人员都可以完成的任务,因为存在许多辅助其执行的工具。 但是架构重构需要更多的专业知识,因为开发人员需要说一些软件架构才能理解更改,并且软件架构师需要成熟的经验,并且(在大多数情况下)需要很多勇气!

软件架构师有责任与参与重构的团队组织所有必要的会议,以与他们分享重构的理念和目标。 与代码重构不同,最好在开始工作之前对最终设计有一个完整的了解。

最后,确保保留实际的源代码,并且在操作环境中可以制定计划B,以准许工具的正常交付,以防重构任务会带来意想不到的困难,从而延误原计划。 计划B可以是例如与重构团队并行工作的小型开发团队,该团队将在实际系统中包括针对重构体系结构的最紧急的新要求。 这应该是管理层定义的迁移计划的一部分。

文献资料

代码重构不会像体系结构重构那样影响系统文档。 最重要的是,文档编写为:

  • 迁移计划
  • 重构的动机
  • 影响和成本估算

现有文档列表将必须修改为:

  • 系统设计文件
  • 企业架构文档

实施环境

架构重构会对实施环境产生巨大影响; 例如,可能有必要更改使用的IDE或构建系统,持续集成服务器,测试自动化框架。 最好在开始重构之前分析这些影响,对任务的成本有一个现实的认识,因为实现环境中的意外更改可能会引起重大问题,而这些问题只有在最后阶段才能发现。

结论

以我的经验,我不得不面对几个大型的架构重构 。 考虑到所有上述4个方面,这帮助我成功完成了这些任务并获得了我的管理团队的信心。 最后,如果您是软件架构师,我想提到另一个方面,这是关于个人感觉的: 体系结构重构不是证明您的错误或错误决定证据 ,只是在某个时刻它是必要的,并且这可能是最好的方法挑战并确认您的技能

参考: Refactoring Ideas博客上的JCG合作伙伴 Marco Di Stefano提供的代码重构与体系结构重构 。

翻译自: https://www.javacodegeeks.com/2013/05/code-refactoring-vs-architecture-refactoring.html

代码重构与体系结构重构相关推荐

  1. 为什么要代码重构?如何重构?常见重构技巧,值得收藏!

    >>号外:关注"Java精选"公众号,回复"2021面试题",领取免费资料!"Java精选面试题"小程序,3000+ 道面试题在 ...

  2. 重构-改善既有代码的设计:重构原则(二)

    1.什么是重构 重构(Refactoring):在不改变软件的功能和外部可见性的情况下,为了改善软件的结构,提高清晰性.可扩展性和可重用性而对软件进行的改造,对代码内部的结构进行优化. 2.为何重构 ...

  3. 谁都忍不了烂代码,如何用重构的方式让它整洁起来?

    写在前面 现在的软件系统开发难度主要在于其复杂度和规模,客户需求也不再像 Winston Royce 瀑布模型期望那样在系统编码前完成所有的设计满足用户软件需求. 在这个信息爆炸技术日新月异的时代,需 ...

  4. 设计代码说明什么是多态性?如何实现多态?(代码中要写注释解释)_狗屎一样的代码!快,重构我...

    关注后你就是我的人了 重构不止是代码整理,它提供了一种高效且受控的代码整理技术. (一)重构原则 1.何谓重构 对软件内部结构的一种调整,目的是在不改变软件可观察行为的前提下,提高其可理解性,降低其修 ...

  5. 代码坏味道与重构之中间人和内幕交易

    文章目录 1. 中间人 2. 内幕交易 1. 中间人 定义:一种多度使用委托(某类一半以上方法都委托给其他类)的代码. 影响:当需求发生某些变化的时候,作为中间人的代码总会被牵连一并修改,代码越发臃肿 ...

  6. 个体重构:将重构应用到生活中

    Bryan Beecham在Agile Testing Days 2015敏捷测试大会上以个体重构作主旨发言.InfoQ就个体重构如何帮助我们来改善我们的生活,它与代码重构的关系,为什么他认为健康饮食 ...

  7. [转载]用JBuilder 2005实现重构之认识重构

    用JBuilder 2005实现重构之认识重构 为什么要重构 从Martin Fowler所著的<重构--改善既有代码的设计>一书连续两年成为最畅销的计算机图书之一,就可以知道重构给程序员 ...

  8. 如何学习页面重构/对页面重构理解

    笔者是前端小白一枚,在往前端页面重构方向学习成长中,今天花了一天时间学习相关的文章 在这里集合一些关于重构基础概念和成长建议,希望能对想了解和学习页面重构的同学有所帮助 文章中提到的相关文章均说明链接 ...

  9. 【Java设计模式 规范与重构】 五 重构实战:基于ID生成器case

    前面学习了这么多重构相关的知识,比如:持续重构.单元测试.代码的可测试性.解耦.编码规范.都是在理论层面,而重构本身是一个实战的事儿,所以如何将这些理论运用到实践中至关重要,否则只能是纸上谈兵.今天用 ...

最新文章

  1. python中的协程(二)
  2. python3 字符串操作总结
  3. 声明及赋值_重述《Effective C++》二——构造、析构、赋值运算
  4. java table修改指定行_(变强、变秃)Java从零开始之JQuery购物车功能实操
  5. boost::metaparse::v1::impl::empty_string相关用法的测试程序
  6. PHFRefreshControl
  7. 微服务开发利器:ELK进行日志采集以及统一处理
  8. APP审核关于3.2.1金融资格的审核回复苹果
  9. 【ERNIE】深度剖析知识增强语义表示模型——ERNIE
  10. 找出冲突的Windows快捷键
  11. 2.flashFXP破解
  12. 设计一款内容阅读app,要求与市面上的产品有差异化,列举其核心功能,画出页面设计原型图(2-3个),说明其产品价值
  13. 全国哀悼日 网站变灰代码集锦
  14. sequence_item、sequence、sequencer、driver的关系
  15. R 语言中1 和1L的区别
  16. 我是如何做技术分享的 ?
  17. 区分Linux:eth0,eth1,eth2,lo
  18. rviz一些无法正常显示的问题
  19. Java 与 Mysql 时间相差八小时
  20. ESP32-C3使用LEDC外设实现呼吸灯效果

热门文章

  1. 互联网金融将会成为真正的“穷人银行”
  2. linux多线程之条件变量
  3. 面试必学JVM面试题(附答案)
  4. 数学建模——管住嘴迈开腿——python实现
  5. outlook 日历共享_如何与他人共享Google日历
  6. 科大讯飞语音录入的功能
  7. 做SEO要做到“四处一词”
  8. ELK性能优化实战总结:我强任我强,你“跪”标准好好学
  9. 微信理财试水,腾讯、淘宝再度开战
  10. 邮件附加推广信息/邮件格式范本范文