反模式之幻数
1. 简介
设计模式可用作软件开发的地图。这些模式建议如何有效地应对反复出现的编程挑战。通过这种方式,模式足够通用,可以适应几个不同的编程项目,从而在异构上下文中解决相同的问题。
然而,反模式是软件开发中常见的实践,在实践中并不真正有效。因此,反模式非但没有改进最终软件,反而使软件开发和维护变得更加困难。
在本教程中,我们将研究称为幻数的反模式。首先,我们将简要回顾一下模式和反模式。因此,我们将探索幻数反模式。最后,我们将看到一些幻数的实际示例以及将它们从代码中删除的做法。
2. 设计模式
在不同的编程项目中反复出现一些挑战和问题。因此,在某些时候,软件工程师和计算研究人员总结了这些问题和挑战,提出了解决或避免这些问题的设计模式。
设计模式不是代码本身。实际上,这些设计指示了组织和开发代码的方法。
采用设计模式的最大好处在于它们已经被许多开发人员使用和测试。这样,开发人员使用和批准设计模式的次数越多,就越能保证它能够解决编程项目的潜在问题和挑战。
在编程项目中采用设计模式的一些常见优点是:
- 生产力:由于设计模式避免了编程问题,软件开发将需要更少的调试和解决问题的阶段,从而提高整体生产力
- 可维护性:大多数设计模式依赖于低耦合和标准化编码。因此,修改、删除或向软件添加功能很简单
- 支持:存在几个由特定设计模式从业者组成的开放社区。在这些社区中,有几个论坛和问答页面来获取信息和支持
2.1. 反模式
总之,反模式是没有好处的模式,可能会损害从其他设计模式获得的好处。
反模式可以理解为最初看起来无礼或有益的坏习惯或重复行为。但是,随着编程项目的进展,反模式成为团队的问题。
此外,反模式是可解决的。因此,有一个标准且可重现的重构过程,以从源代码中删除反模式。
著名反模式的一些示例是前沿(组织反模式)、镀金(软件设计反模式)和幻数(编程反模式)。
我们将在以下各节中详细研究幻数反模式。
3. 幻数
一般而言,幻数是直接用于源代码处理例程的数值。幻数就业存在多种情况。这些方案中最常见的是:
- 源代码中出现一次或多次的未命名常量值
- 实际上是协议或文件格式标识符的未指定值
- 仅在特定源代码中使用的唯一值,没有全局含义
无论幻数的情况如何,它们的出现都会损害编程项目的可维护性和简单性。
幻数的第一个潜在问题发生在不熟悉源代码的程序员开始处理它时。
幻数没有明确的解释它们是什么。因此,程序员需要跟踪代码中每个幻数的含义和出现次数。
另一个问题是更改具有多次出现的幻数。在这种情况下,程序员将在代码的不同位置执行多个更改。此过程比仅更改变量或常量的值需要更多的精力和时间。
最后,使用幻数会使编程过程更容易出现拼写错误。当幻数是大数字时,它尤其重要,并且只检测一两个错误的数字更难。
除了避免前面提到的问题外,不要使用幻数会带来其他好处,例如:
- 改进了 IDE 和文本编辑器提供的代码完成的使用
- 允许在源代码中创建一个块,所有变量和常量替换幻数
- 便于编写代码文档
我们将在以下小节中看到使用幻数的最常见方案的示例。
3.1. 未命名常量值
我们通常会在源代码中找到定义循环停止标准的未命名常量值。通常,这些常量在代码中不会长时间更改。例如,如果我们逐个检查 SHA1哈希字节,我们将始终使用 20 个字节。
让我们看一个示例,其中 SHA1 哈希检查是用一个幻数(红色数字)完成的:
但是,如果我们在系统中更改 SHA2 的 SHA1 哈希,则必须跟踪代码中的每个 SHA1 长度幻数,并将它们更改为 SHA2 长度值 (32)。
为了避免这种情况,我们可以定义一个哈希长度的常量并使用它代替幻数,请参见下面的示例:
3.2. 未命名标识符值
实际上,未命名标识符也是常量值。但是,在此特定情况下,它们表示协议、文件格式或代码中的任何其他特定标识符。
发生这些标识符的示例场景是当我们处理网络流量的标头时。一个特定的例子是 IPv4 的协议字段或 IPv6 的下一个标头,它携带数据包中下一个标头布局的代码。
让我们考虑一种算法来检查 IP 数据包中的以下标头是否是预期的标头。所以,如果我们使用一个幻数来实现它,我们将得到这样的东西:
需要注意的是,用于访问 IPv4 数据包 (P[9]) 特定位置的索引也用作幻数。这种幻数将在以下小节中讨论。
为了避免幻数并在必要时轻松更改协议验证,我们可以定义一个常量来保持协议标识符值,如以下示例所示:
3.3. 没有全局意义的唯一值
没有全局含义的唯一值通常作为特定算法的特定例程出现。例如,我们可以看到客户端算法执行的最大尝试次数以连接到服务器。
接下来,该算法显示了前面描述的示例:
为了避免使用幻数,我们可以使用变量或常量来定义所需的连接尝试次数。见下文:
4. 结论
在本教程中,我们研究了称为幻数的反模式。起初,我们看到了对设计模式的简要回顾,重点是反模式的概念。因此,我们特别研究了幻数反模式,展示了它通常发生的不同场景的示例。
我们可以得出结论,使用反模式通常会在编程项目中带来一些未来的挑战。具体来说,幻数可能会导致源代码的可维护性和可理解性出现问题。
通过这种方式,为了避免这些潜在的问题,我们可以以有组织和直观的方式用变量和常量替换幻数。
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。 原始发表:2023-02-15,如有侵权请联系 cloudcommunity@tencent 删除架构教程设计模式协议编程
发布评论