编码 Katas 用于练习重构遗留代码

2023-12-22

近几个月来,我对 katas 编码非常感兴趣。我相信它们是磨练我的编程技能和提高我在工作中编写的代码质量的好方法。

有很多地方都可以找到卡塔斯。喜欢..

http://codekata.pragprog.com/ http://codekata.pragprog.com/

http://schuchert.wikispaces.com/Katas http://schuchert.wikispaces.com/Katas

http://www.codingdojo.org/ http://www.codingdojo.org/

我发现这些都是 Katas 的优秀存储库……我对其中一些的尝试获得了巨大的回报。

然而,我觉得迄今为止我所见过的所有 Kata 都有一个缺点。他们似乎都不允许我练习重构糟糕的代码。第一次学习如何编写干净的代码真是太棒了……但在我目前的工作中,我没有太多机会编写新代码。相反,我经常与遗留代码作斗争,并试图找出如何重构模块、消除依赖关系并减少耦合。

因此,我正在寻找一些 Katas,我可以用它们来磨练重构遗留代码并将其转换为干净代码的技能。

有谁知道已经存在的吗?我知道我在工作时进行了大量练习...但我想磨练我的技能,使我能够快速了解​​如何分解类中的依赖关系和分离关注点做得太多了。


我不知道有哪个网站可以直接对它们进行编目,但我有时使用的一种策略是:

  1. 在 sourceforge 上查找一个旧的、小型的、无人维护的开源项目
  2. 下载它,编译/构建/运行
  3. 阅读文档,感受代码
  4. 使用以下技术有效地处理遗留代码测试其中的一部分
  5. 重构该部分,也许修复错误并一路添加功能
  6. 重复步骤 4 至 6

当您发现某个部分特别具有挑战性时,请扔掉您的工作并重复几次以增强您的技能。

这不仅练习重构,还练习其他技能,例如代码阅读、测试和处理构建过程。

最难的问题是找到一个你有足够兴趣继续工作的项目。我上一个工作是一个用于遗传编程的 python 库,而我当前正在工作的是一个用于 Java 的 IRC 库。

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

编码 Katas 用于练习重构遗留代码 的相关文章

  • 函数式 Scala 的重构/布局

    这一班班轮 Console println io Source fromFile names txt getLines mkString split map x String gt x slice 1 x length 1 sortBy x
  • 有没有办法仅针对其副作用来应用重构脚本?

    我有一个库已更改为引入工厂方法来替换构造函数 原因现在并不重要 在当前情况下主要是为了改进类型推断 假设有is一个 Eclipse 重构脚本 所以我几乎有一个很好的计算机可读的更改描述 有什么方法可以apply该脚本仅适用于项目uses那个
  • 将 cout 和 stdout 重定向到 C++ 中的字符串以进行单元测试

    我正在努力在单元测试下获取一些遗留代码 有时感知现有程序行为的唯一方法是从控制台输出 我在网上看到很多关于如何将 stdout 重定向到 C 中的另一个文件的示例 但是有没有办法可以将其重定向到内存中的流 以便我的测试不必依赖于磁盘 我希望
  • 清理遗留代码“header spaghetti”

    任何清理 标题意大利面 的推荐做法 这会导致极其严重的后果 编译时间慢 Linux Unix GCC 中是否有相当于 pragma Once 的东西 发现与此相关的冲突消息 Thanks 假设您熟悉 包含防护 ifdef 在标头开头 加快构
  • PHP 中的死代码检测 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 重构这个基本代码,确定数字是否为数十、数百、数千等

    if n lt 100 x 10 else if n lt 1000 x 100 else if n lt 10000 x 1000 else if n 等等等等 对于此类问题 是否有一种简洁 可扩展的方法 我的大脑决定停止工作 var x
  • 如何在多线程环境中使用旧的单线程 C++ 库

    我有一个旧的 C 库 它是为在单线程环境中使用而设计的 该库公开了用于初始化的接口 这改变了库的内部数据结构 以及仅读取数据和进行计算的用法 我的目标是在 Windows 多线程应用程序中使用这个库 不同的线程调用使用不同数据初始化的 dl
  • 如何使用重构从类中删除泛型类型

    我有这门课 public class TimeIntCo
  • 如何通过多态优雅地转换 switch+enum

    我正在尝试用类型类替换简单的枚举 也就是说 从每种类型的基派生一个类 例如 而不是 enum E BASE EB ALPHA EB BRAVO E BASE message someMessage switch message case E
  • 如果只使用一次本地函数,那么使用它们还有什么意义吗?

    想象一下我有这样的代码 public void Foo Do bar work Do baz work Do foobar work 我意识到我可以 而且应该因为它做了不止一件事 将其重构为 public void Foo bar baz
  • 从 Spring 控制器中删除重复项

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

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 Question 我的问题是如何教授整理和重构代码的方法和重要性 背景 我最近正在为一位同事进行代码审查 他们对早已消失的同事工作做了一些
  • 我该如何优化 IE7/IE8 的 ajax 应用程序以避免“停止运行此脚本”?

    我的预订引擎在 IE7 中运行非常缓慢 它是 ajaxified 和基于 hash window onchange 的 总共有 5 个步骤 我遇到的主要问题是第 2 步在 IE 中速度非常慢 当用户到达第 2 步时 系统会发出 ajax 请
  • 如何处理第三方库代码中的 exit() 调用?

    我正在开发一个 C 应用程序 该应用程序使用另一个团队用 C 编写的库 图书馆的作者喜欢打电话exit 当发生错误时 立即结束程序 而不调用 C 应用程序中堆栈上对象的析构函数 应用程序设置了一些系统资源 这些资源在进程结束后不会自动被操作
  • 编写自定义重构脚本的最佳 Java 库是什么? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • Visual Studio 2017 重构不适用于 F#

    我有项目在F 我正在尝试VisualStudio2017 我尝试重构代码并使用内联 但此菜单项不可用 另外当我点击Rename什么都没发生 为什么不可用 如何强制refactor操作才能工作 let blobToBlobWithInfo b
  • 使用 intelliJ 将字符串串联重构为 StringBuilder

    我被指定对一个项目进行重构 我遇到了这种情况 this path DESTINY deploy name FILE SEPARATOR delivery getSystem getCode FILE SEPARATOR delivery g
  • ASP.NET MVC 中的魔术字符串

    我有桌面软件开发背景 并且正在开始学习 ASP NET MVC 在我的默认 HomeController 中 我有 Index 操作 其代码如下所示 if Request IsAuthenticated return RedirectToA
  • 你如何处理冗余代码?

    我有一个类 它是代码库项目的一部分 该项目是为不再需要的特定目的而编写的 所以问题是你如何处理这样的代码 您是否简单地删除它 或者您是否记住它 未来的开发人员可能会遇到它 但没有意识到他们可以忽略它 或者您是否有某种存档系统 是否存在公认的
  • Java中构造函数中的长参数列表[重复]

    这个问题在这里已经有答案了 可能的重复 重构具有太多 6 个以上 参数的方法的最佳方法是什么 https stackoverflow com questions 439574 whats the best way to refactor a

随机推荐

  • 在 Java 桌面应用程序中使用 Firebase Admin(使用 Eclipse)

    我想在我的 java 应用程序中使用 firebase admin 在网站上它说我可以通过 gradle 或 maven 添加它 但我不想那样做 相反 我从 Maven 中央存储库网站下载了 jar 文件 并将其作为库添加到我的项目中 我添
  • 使用动态类型调用通用扩展方法[重复]

    这个问题在这里已经有答案了 我正在尝试执行一个返回类型 T 的对象的扩展方法 但我正在尝试基于标题 详细信息动态泛型类型使类型 T 动态化 这可能有点冗长 using System using System Collections Gene
  • CXF 和 JAX-WS 之间的区别

    我对网络服务还很陌生 我无法找到 JAX WS 和 CXF 之间的区别 根据我的理解 JAX WS是java提供的规范 CXF是实现 如果我错了 请纠正我 是的你是对的 JAX WS 是基于 SOAP 的 Web 服务的 Java 规范 C
  • iOS OpenGL ES - 模拟器和设备上的不同纹理行为

    我正在使用 OpenGL ES 加载纹理 下面是我的代码 该图形由 2 个相同大小的纹理 停止按钮和后面的蓝色发光组成 下面的第一张图是使用 xCode 中的 iPad 模拟器拍摄的 第二张图是在实际设备上拍摄的 第一个图形是我从 Illu
  • Svelte:以可重用的方式关联标签和输入

    我正在构建一个 Svelte 输入组件 该组件应该在同一页面上多次使用 div div
  • Google 新的 reCaptcha 网站验证未返回任何响应

    I do 现场验证 https developers google com recaptcha docs verify得到后g recaptcha response通过用户验证 我发送带有参数的 xhr POST 并得到 200 OK 但没
  • 如果列 A 有子字符串则绘图

    我需要在 gnuplot 中执行此操作 plot 1 4 where col 2 P1 col 3 3 col 1 has substring blur1 这是一个数据集 col 1 col 2 col 3 col 4 gcc blur1
  • 如何在 Android 中通过蓝牙发送十六进制值

    我想通过蓝牙 SPP 在 android 中发送十六进制字符串 我试过这个 输出 sock getOutputStream String myHexString Integer toHexString 80 Integer toHexStr
  • 如何将文件夹中的所有文件作为模块导入并将所有文件导出为对象? [复制]

    这个问题在这里已经有答案了 我试图将每个文件导出为某个文件夹中的模块 然后将其作为单个对象导入 我该怎么做 我制作了一个带有很长的单个文件的 JavaScript 插件 我现在正试图将其分成几个文件 我正在使用 Webpack 而且 在我的
  • 我可以在 Protractor 框架中重用/调用 Selenium-Java 框架中的现有 API 吗?

    如果这是一个愚蠢的问题 请耐心等待 但想到了一个主意 我们有一个非常复杂的 Selenium Webdriver Java 框架 但现在我们应用程序的某些部分正在 AngularJS 中实现 我们想使用量角器进行自动化测试 但我们希望重用现
  • 使用 AngularJS 启用/禁用锚标记

    如何使用指令方法启用 禁用锚标记 例子 单击编辑链接时 需要禁用或灰显创建和删除 单击创建链接时 需要禁用或灰显编辑和删除 JavaScript angular module ngApp controller ngCtrl scope fu
  • 在Android中检测蓝牙Le设备

    我是 Android 应用程序开发的初学者 我尝试阅读文档 但一无所获 Android 教程中的功能 例如StartLeScan 已被弃用 等等 是否有一个简单的函数可以返回蓝牙设备列表 就像是getDevices gt 设备列表 谢谢 基
  • 在 Ruby on Rails 中进行测试时更改规范中会话变量的值。(使用水豚和 selenium)

    我目前正在为我的 Ruby on Rails 应用程序编写规范 使用 Rspec 和 capybara 以及 selenium 来驱动浏览器 在执行其中一项规范时 我想更改会话变量的值 例如 我想设置session location US
  • 数组,如何仅显示“变化的值”

    假设我有一个包含日期和季节的数组 每天都有一个条目 我想仅在季节值发生变化时打印数组行 数组看起来像这样 2009 10 28 00 00 00 good season 2009 10 29 00 00 00 good season 200
  • 功能性香蕉旅行者 - 将行为与游戏状态结合在一起

    问题是我不知道如何创建类型的行为Behavior t GameState 我有更多代码 但我试图仅展示我认为讨论该问题所必需的内容 如果有空白需要填写 请告诉我 这是我所拥有的 data GameState GameState agent
  • 如何自定义 Android BLE(低功耗蓝牙)gatt 传输速度?

    我正在构建一个使用 BLE 技术传输图像的应用程序 图像不需要立即传输 因此在阅读一些文档后 我得出结论 1 3 Mbit s 是一个合理的选择 From Wikipedia Distance Range lt 100 m lt 330 f
  • php 文件上传时间创建

    我知道有一种方法可以使用 PHP 获取文件夹中的文件名列表 but 目前有什么方法可以获取使用 php 上传 创建文件的日期 时间吗 Unix 不跟踪文件的创建时间 只跟踪文件的更改 修改和访问时间 您可以使用文件时间 https www
  • 从命令行参数打开文件

    我正在尝试创建一个汇编程序 该程序创建在命令行 argv 1 上指定的文件 如果字符串已经存储在其中 它工作得很好 但是如果我按原样运行它 而 file name 没有移动到 rbx 它工作得很好 section text global s
  • dynamodb.put().promise() 不返回 put 对象

    我正在尝试利用 aws 和 dynamo db 的异步 等待功能 下面是如何在 async wait 之前放置对象的示例 正 如您在回调中看到的 您可以访问包含放置对象的数据 然而 在使用 async 和 Promise 的第二个代码块中
  • 编码 Katas 用于练习重构遗留代码

    近几个月来 我对 katas 编码非常感兴趣 我相信它们是磨练我的编程技能和提高我在工作中编写的代码质量的好方法 有很多地方都可以找到卡塔斯 喜欢 http codekata pragprog com http codekata pragp