如何分解肿的功能
因此,您一直在研究一个新的应用程序-也许与其他一些应用程序,也许没有。 刚开始时,您充满了对概念的热情,对所选技术堆栈的乐观态度以及坚定地致力于编写有史以来最好的代码。
然后,此函数中只有一个小错误,最快的解决方法是将另一个参数传递给它。 你知道你不应该的。 但是你做到了。 时间毕竟是金钱吗?
然后,您必须从该函数内部调用另一个函数,因此您只是将所有参数从当前函数传递给了那个函数。
然后还有另一个错误,因此您将两个功能合并在一起。
在不知不觉中,您正在合并函数,向每个类添加大量方法,并创建没有清晰路径的错综复杂的互连调用网。
您的意图很好,但急忙要尽力而为。
现在程序已接近完成,您需要撤消损坏,以使所有这些肿的功能更易于维护。
要么……..
像我一样,您继承了一个庞大的代码库,其中包含来自某人的大量肿且相互关联的功能,并且您的工作是减轻负担并精简一切。
无论哪种方式,这都是执行此操作的指南! 我们将重构以下功能:
它是用JavaScript编写的-如果您不熟悉该语言,则不必担心语法。 这是关于我们对重要代码执行操作背后的概念的。 并且请记住,在这个示例中,我故意使这些重构动作变得显而易见。 在实践中,需要仔细观察以发现应用这些技术的方法。
1.将对象用于相关数据的集群
分解的第一步是将相关数据簇转换为对象。 尽管-如您在下面看到的-尽管它最初会增加每行的长度并使代码更难阅读,但它将使接下来的两个步骤变得更加容易。 在这里,我们将字符统计信息和字符参数都转换为对象:
2.确定现有的无损压缩点
假设您的代码编写整齐,可读性强,那么行和字符越少越好。 了解的越少,维护和扩展就越容易。 我喜欢在可以减少字符数而又不降低可读性或不混淆逻辑无损压缩点的地方打电话给我。 理想情况下,您还希望防止扩展性下降。 但是在某些情况下,当您不需要此功能时,牺牲可扩展性是有意义的。
无损压缩点; 您可以减少字符数并改善就地扩展性的区域。
请记住,这些机会会根据语言而改变!
在此代码中,有两个主要压缩点;
- 我们不需要实例化一个空字符对象,因为每个种族都在产生自己的“基本”配置文件。
- 为每个
heroClass创建一个“字符配置文件”,然后将这些属性添加在一起,使系统更具声明性,并且不再需要if else if语句,因为这可能会因加载heroClass变得乏味。
3.分解为分组功能
这是最简单的方法,通常是出门之举,但是我强烈建议您坚持这一做法。 当所有内容都在一个地方时,执行前两个步骤会更容易,并且使您在使用实际代码时也更容易弄清楚这一步。
现在,我们已经对数据进行了聚类并减少了字符数,我可以轻松地发现分组功能的四个方面:
- 角色基础配置文件选择器,由种族选择。
- 角色类申请者
- 基于级别的属性乘数
- 动力鞋帮!
因此,我们得出了最终的解决方案。
该代码是解耦的,易于扩展和声明,没有副作用!
总结一下
- 将相关数据聚集成对象。
- 减少现有无损压缩点的字数。
- 通过将功能分组在一起来分解大功能。 每个功能只能做一个新事情!
作为练习,请使用原始代码文件,对其执行此过程,然后在下面的注释中添加指向您自己的结果的链接!