代码之家  ›  专栏  ›  技术社区  ›  Lernkurve

有哪些技术可以防止/删除共享状态?

  •  1
  • Lernkurve  · 技术社区  · 14 年前

    问题

    共享状态在某些情况下是一件坏事。我现在在一个项目中,几乎所有的方法都执行某种类型的状态更改。我认为这是个问题。一方面,我不能重用这些方法,因为根据当前的系统状态,方法调用后的新系统状态将不同。另一方面,在这个项目中,测试是非常困难或几乎不可能的。

    问题

    所以我想知道有什么技术 防止 共享状态或 重构 这样的应用程序可以减少相互依赖。

    一种方法是用更实用的编程方法编程。还有哪些其他最佳实践,以及在哪些情况下它们最合适?

    如果代码示例有助于解释该技术,将非常感谢。

    例子

    坏的

    模量

    Public Sub DoSomething
        Range("A2").Value = Worksheets("Sheet2").Range(cellReference).Value + 10
    End Sub
    

    模B

    Global cellReference = "B22"
    

    更好 (因为没有对全局变量的引用,也没有硬编码的工作表和单元格引用)

    模量

    Public Sub DoSomething(resultCell, sourceSheet, sourceCell)
           Range(resultCell).Value = Worksheets(sourceSheet).Range(sourceCell).Value + 10
    End Sub
    

    模B

    deleted
    

    解释

    所以,我想这里应用的技术是:

    • 删除硬编码值并将其作为参数传入
    • 移除对全局变量的引用并将其作为参数传入

    我知道,不管怎样,这些都是基本的最佳实践。但也许有一些特别的帮助来防止共享状态。我想 Erik Meijer 说如果你分享了这个状态,通常会有一些错误(我不确定我引用他的话是否完全正确)。

    环境

    顺便说一句,这是一个Excel VBA项目,它包含了大量由没有软件工程背景的人开发的遗留代码。不过,答案不必针对这个特定的设置。

    2 回复  |  直到 11 年前
        1
  •  0
  •   SoulWanderer    14 年前

    我将大量重构以尽可能多地删除全局变量,这将是第一步。 作为第二步,对硬代码进行重构并生成属性文件可能很有用。

    稍后,您可以分析方法,找到代码副本(在这种软件上有很多副本是很常见的…)并且,根据应用程序所需的知识,您可能能够进一步使用某种状态机。 (你说你会接受的,作为答案)

        2
  •  0
  •   SoulWanderer    14 年前

    我真的不知道我是否明白,但是如果我有很多共享状态的问题,我会使用一些 state machine .

    有了这个,您可能可以了解什么是代码 状态依赖 什么代码是交叉的…

    例如,要开发一个工作流(许多状态信息,需要检查要做什么),这是一个很好的解决方案,并且您有大量的文档…

    希望它有帮助!

    推荐文章