【问题标题】:how do you call this anti-pattern?你怎么称呼这种反模式?
【发布时间】:2009-10-06 12:37:38
【问题描述】:

在数据库中,您有一个带有位字段的表,我们将该字段称为 Active

在应用程序中你有一个布尔变量,我们称之为 NotActive

每次从表中获取字段时,在应用程序中都切换变量的含义。

NotActive = !mytable.active;

另一个例子是数据库中名为 Enable__yes__no 的位字段以及您所做的代码中

control.enabled = !mytable.Enable_yes_no

最好的做法是保持相同的名称和相同的含义,但是上面的模式,你怎么称呼它?

【问题讨论】:

  • 这不是模式。模式是对各种情况下最佳实践的描述。这是糟糕的编程,充其量是一种反模式。
  • 将标签和标题更改为反模式
  • @Sinan,我会回滚你的修改,因为我同时编辑了我的问题。只需更新我更新的问题

标签: anti-patterns


【解决方案1】:

我不会用负前缀命名布尔变量。

将变量命名为 IsActive 或 Active,将其命名为 NotActive 是双重否定

编辑/澄清:

如果需要检查事物是否处于活动状态,则需要双重否定:

If (!NotActive) { DoSomething() }

正布尔变量名称更容易理解:

If (isActive) { DoSomething() }

【讨论】:

  • 双重协商?你是说双重否定吗?
  • +1:我也想说这个。调用变量 NotXXX 是不好的模式。好点子。一个更好的名字应该是 Disabled。
  • 只需重命名变量 IsNotNotActive。现在逻辑又是积极的了。
  • NotActive 不是双重否定,而是单一否定。 NotInactive 更接近双重否定。
【解决方案2】:

设计混淆?

【讨论】:

  • 通过排序设计(也称为 NDeso_DesgnPoo)实现非去混淆
【解决方案3】:

向后兼容现有数据库?

【讨论】:

  • 抱歉,Alex,你是认真的吗?
【解决方案4】:

它被广泛称为“非非负意大利面条混淆模式”,并于 1972 年首次被提及。;-) SCNR

【讨论】:

    【解决方案5】:

    我认为这里的问题在于架构,而不是数据的具体命名。例如,如果您使用实体框架,则此表的实体可以声明一个名为 InActive 的属性,并且可以使用 Active 列作为数据存储。就外界而言,来回翻译是透明的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-08-18
      • 2018-12-19
      • 2013-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-16
      相关资源
      最近更新 更多