关于使用遗留代码的建议

2024-02-24

我需要一些关于如何使用遗留代码的建议。

不久前,我接到的任务是向报告应用程序添加一些报告。 2005 年用 Struts 1 编写的。没什么大不了的,但是代码相当混乱。没有使用Action形式,基本上代码就是一个巨大的action,里面有很多if-else语句。此外,这里没有人具备这方面的功能知识。我们只是碰巧在合同中包含了它。

我对此很不满意,不知道如何继续。这个应用程序是隐形的:很少有人(但都非常重要)使用它,所以他们不在乎我在阅读代码、标准等时眼睛是否流血。

不过,我觉得技术债是要还的。我应该如何进行呢?继续沿着 if-else 的道路走下去,还是尝试以正确的方式满足此要求,而忽略项目的其余部分?冒着截止日期的风险开始大规模重构?


遗留代码是一个大问题,我相信人们不会同意!

我想说,开始大规模重构可能是一个错误。

重大重构意味着需要做大量工作才能使其按照现在的方式运行。如果您选择自己承担这件事,那么您所做的事情不会有太多的可见度。如果它有效,没有人会知道你写的工作时间。如果它不起作用,并且您最终得到了整洁的代码,但添加了一些错误(以及谁曾经编写过没有添加一些错误的代码),那么您将得到“为什么要进行此更改”类型的问题。

我目前即将完成一个基于 10 年历史的代码库的项目。一路上我们已经做了很多重构。但对于我们所做的每一次重构,我们都可以证明“这一特定的改变将使我们现在正在执行的实际任务变得更容易”。而不是“这对于未来的工作来说现在更干净”。我们发现,当我们处理代码、一次解决我们实际遇到的问题时,我们已经清理了很多代码,但没有(太多)破坏它。

我想说,在您进行大量重构之前,您将需要自动化测试,因此您会很高兴您已将其正确地重新组合在一起!

大多数重构都是为了“使维护和未来的开发更容易”。你的项目听起来未来不会有太多的发展。这限制了重构给公司带来的优势。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

关于使用遗留代码的建议 的相关文章

  • WebStorm 将重构范围限制为仅当前文件

    编辑 这是我创建的问题的链接 https youtrack jetbrains com issue WEB 21956 https youtrack jetbrains com issue WEB 21956 是否可以将 WebStorm
  • 通过轻量级迁移更改核心数据实体名称?

    有没有办法在 iOS 上使用 自动轻量级迁移 的同时更改核心数据实体名称的名称 在目标模型中 将重命名标识符设置为源模型中实体的名称 在 Xcode 3 中 重命名标识符位于详细信息窗格的用户信息窗格中 版本哈希修饰符下方 在 Xcode
  • PHP 中的死代码检测 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何在多线程环境中使用旧的单线程 C++ 库

    我有一个旧的 C 库 它是为在单线程环境中使用而设计的 该库公开了用于初始化的接口 这改变了库的内部数据结构 以及仅读取数据和进行计算的用法 我的目标是在 Windows 多线程应用程序中使用这个库 不同的线程调用使用不同数据初始化的 dl
  • 将类成员复制到其他类中 - eclipse

    当您需要将某些类功能移动到另一个类中时 可以通过通过引用某些公共变量 Ctrl Shift G 搜索相应的方法 然后使用 Eclipse 的重构功能 Move 来轻松完成 该功能允许移动选定的方法进入其他班级 但也可能发生您需要复制方法的情
  • 如何在 using 语句中使用对象初始值设定项?

    有没有什么方法可以重构此代码 以便不必使用临时变量 而仍然使用与对象初始值设定项关联的语法糖 FrmSomeForm someTempForm new FrmSomeForm SomePropA A SomePropB B SomeProp
  • Eclipse:“重构 - 重命名”完全混乱,替换文件中的任意字符

    在重构类名时 Eclipse 最近表现出非常奇怪的行为 例如 让我们看一下我们的一个课程 public class CampaignCSVPanel extends ContentPanel private FileUploadField
  • 从 Spring 控制器中删除重复项

    我一直在寻找一种方法来减少 Spring MVC 控制器中因细微差异而重复的代码量 但到目前为止搜索 SO 问题只产生了一些问题 没有任何令人满意的答案 我想要删除的重复示例是这样的 其中用户创建页面和角色创建页面有相似之处 Request
  • 关于使用遗留代码的建议

    我需要一些关于如何使用遗留代码的建议 不久前 我接到的任务是向报告应用程序添加一些报告 2005 年用 Struts 1 编写的 没什么大不了的 但是代码相当混乱 没有使用Action形式 基本上代码就是一个巨大的action 里面有很多i
  • unittest 测试用例中的重复代码

    我有一个如下所示的测试用例 def MyTestCase unittest Testcase def test input01 self input read from disk input01 output run input valid
  • 方法可以变成静态的,但是应该吗?

    ReSharper 喜欢指出每个 ASP NET 页面的多个可以静态化的函数 如果我将它们设为静态会对我有帮助吗 我应该将它们设为静态并将它们移至实用程序类吗 在我看来 性能 命名空间污染等都是次要的 问问自己什么是合乎逻辑的 该方法在逻辑
  • 我该如何优化 IE7/IE8 的 ajax 应用程序以避免“停止运行此脚本”?

    我的预订引擎在 IE7 中运行非常缓慢 它是 ajaxified 和基于 hash window onchange 的 总共有 5 个步骤 我遇到的主要问题是第 2 步在 IE 中速度非常慢 当用户到达第 2 步时 系统会发出 ajax 请
  • Java / 重构 switch case

    我正在尝试重构下一个案例 class Gen public void startClick A a B b List
  • 用 Javascript 进行 OOP 编程 - 正确

    我对改进我的 javascript 代码以使其成为适当的 OOP 很感兴趣 目前我倾向于做这样的事情 jQuery document ready function Page form function return generate a n
  • 我可以使用 *.tlb 文件而不使用 Regasm 在计算机上注册它吗

    我们正在支持老化的 VB6 系统 我们已在 Net 中为其编写了新代码 将代码放入程序集中 然后导出 tlb 文件以与 VB6 代码库一起使用 我的问题是 在我希望运行代码的每台计算机上 我是否必须使用 Regasm 来注册类型库 我之所以
  • 我可以在 MSBuild 文件中执行循环吗?

    目前 我让他遵循以下代码MSBuild项目文件 这真的很简单 定义4变量并为每个变量调用一次我的 MSBuild 任务 求代码
  • 在 WinForms 中保留对控件的全局引用以访问 GUI 线程

    这个问题有一点历史 请耐心听我说 In this https stackoverflow com questions 192980 boiler plate code replacement is there anything bad ab
  • 分割seeds.rb文件[重复]

    这个问题在这里已经有答案了 My seeds rb文件变得非常大 重构文件中数据的最佳方法是什么 我可以将数据放入各种文件中吗 require他们在seeds rb file 我们将所有种子存储在文件夹中db seeds并在里面db see
  • 耦合、内聚和迪米特定律

    The 德墨忒耳定律 http en wikipedia org wiki Law of Demeter表示你应该只与你直接了解的对象交谈 也就是说 不要执行方法链接来与其他对象通信 当您这样做时 您正在与中间对象建立不适当的链接 不恰当地
  • 重构——套接字中的良好实践——简单的服务器-客户端 Swing 应用程序

    我使用单例和观察者模式编写了一个带有 Swing 接口的简单服务器 客户端程序 每个客户端都连接到服务器并可以发送消息 服务器将其收到的消息转发给其余的客户端 客户端使用 GUI 允许它们随时连接和断开与服务器的连接 该程序运行得很好 因为

随机推荐

  • 如何在bootstrap中将div居中居中?

    我想将 7 个 div 居中 但我不知道该怎么做 任何想法 我不想单独更改所有元素的边距 正如您在图片上看到的那样 与我的按钮相比 div 不居中 并且存在 12 列引导问题
  • iOS ARM64 系统调用

    我正在学习更多关于 shellcode 以及在 iOS 设备上使用 arm64 进行系统调用的知识 我测试的设备是 iPhone 6S 我从此链接获取了系统调用列表 https github com radare radare2 blob
  • 如何强制执行“override”关键字?

    有没有办法强制使用 C 11overrideVisual C 2012 中的关键字 也就是说 如果我忘记说override 然后我想得到警告 错误 C 11几乎有你想要的 原来是override关键字是更大提案的一部分 N2928 http
  • Google Places API 未返回印度的任何结果

    https maps googleapis com maps api place search json location 28 635704 77 224982 radius 50000 types restaurant language
  • SQL Server中删除表和删除表有什么区别?

    在 SQL Server 中 以下两者有什么区别 右键单击数据库对象 表 视图 并选择 删除表 即将表脚本编写为 gt DROP To gt New Query Editor Window 右键单击数据库对象 表 视图 并选择删除 我尝试了
  • Chrome 不缓存 css 文件。缓存适用于 .js/.png 文件。

    我观察到 CSS 文件没有在 Chrome 浏览器上缓存 我的应用程序是由 Angular CLI 构建的 所有必需的缓存控制标头和 Expires 标头均设置为 5 分钟 Accept Ranges bytes Cache Control
  • 在 R 中绘制多行文本框

    我正在使用 R 创建多图布局插图 并且能够在其中一个图中创建多行文本框会很方便 我熟悉使用 Sweave 来组合图像 文本和 R 代码 但是由于各种原因 我需要将其作为在 R 中生成的单页图 因此需要绘制文本框而不是使用 Latex 标记
  • GET_TASKS 权限已弃用

    我有一个使用此权限的安全应用程序 App Locker android permission GET TASKS 在 android Lollipop 中 此权限已被弃用 我希望我的应用程序可以在 21 API 中运行 谁能指导我怎么做 T
  • JPADatabase 的 jooq codegen 无法正常工作

    我在 JPADatabase 中使用 jooq codegen 时遇到问题 我经历过这个post https stackoverflow com questions 42968155 unable to generate jooq clas
  • 如何使用 javascript/jquery 获取具有特定文本的元素的类名称?

    我需要一种 JavaScript 或 jQuery 方法来通过 DIV 元素包含的文本提取 DIV 元素的类名 让我们举例说明 如果我有的话 我们可以说以下代码 div class className UniqueText div 我需要知
  • 用于设置主页功能的通用 JavaScript [重复]

    这个问题在这里已经有答案了 是否有任何适用于几乎所有浏览器的 javascript 将网页设置为主页 我正在使用下面的一种 但它只适用于 i e 和 mozilla var flag false function setHomepage w
  • Scalac 挂在 RegexParser 的阶段类型上

    我有一个 scala 程序 其中有一个解析器组合器 这是通过扩展来完成的scala util parsing combinator RegexParsers 我使用 Scala 2 10 开发它 一切正常 昨天我将系统升级到了 Scala
  • 播放前检测浏览器/设备是否可以内嵌播放 HTML5 视频

    我知道我可以检查一下navigator userAgent如果设备是 iPhone 但还有其他设备 其中一些我不知道哪些设备会在其自己的播放器中播放视频 可以列出所有不内联播放视频的浏览器 设备 但我想知道是否还有其他解决方案 JavaSc
  • 创建 iOS 应用程序 (Xcode) 时,如何关闭自动图标“凝胶”

    有没有办法去掉创建 iPhone 应用程序时自动添加到图标的突出显示 或者我必须在 PS 中手动补偿 Thanks Set UIPrerenderedIcon to YES在你的 Info plist 中 欲了解更多信息 请参阅 信息属性列
  • 将 pandas 数据框中的 datetime64 列拆分为日期和时间列

    如果我有一个数据框 第一列是 datetime64 列 如何将此列拆分为 2 个新列 日期列和时间列 这是到目前为止我的数据和代码 DateTime Actual Consensus Previous 20140110 13 30 00 7
  • R 如何将“-17+3”等简单函数分离为数字,例如“-17”和“3”

    我的数据就像 17 3 2 6 我需要做的是将每个数字分成两个数字 例如 17 3 变为 17 和 3 2 6 分为 2 和 6 通过使用 R 非常感谢 gregexpr http stat ethz ch R manual R devel
  • Fortran:哪种方法可以更快地更改数组的等级? (重塑与指针)

    当我们处理大型数组时 考虑数组的等级和形状变化的成本可能很重要 特别是当它在多个子例程 函数中发生几次时 我问题的主要目的是将数组的排名从第二更改为第一 反之亦然 为此 可以使用 重塑声明 指针变量 下面的代码展示了如何使用指针变量 pro
  • C++中双冒号的全名

    如果我有课 class A public A void print private int value A A value 0 void A print cout lt lt value lt lt endl 最后两行中 符号的完整名称是什
  • 如何使用messagebox输出调试信息

    我正在使用 MessageBox 尝试进行一些手动调试 这就是我所想出的全部 我应该如何使其工作 private void DisplayMessageBoxText MessageBox Show Alert Message 您可以使用写
  • 关于使用遗留代码的建议

    我需要一些关于如何使用遗留代码的建议 不久前 我接到的任务是向报告应用程序添加一些报告 2005 年用 Struts 1 编写的 没什么大不了的 但是代码相当混乱 没有使用Action形式 基本上代码就是一个巨大的action 里面有很多i