有什么技术可以防止/删除共享状态?

时间:2010-10-01 07:29:52

标签: vba excel-vba excel

问题

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

问题

所以我想知道阻止共享状态或重构这样的应用程序有哪些技术,因此相互依赖性较小。

一种方法是以更具功能性的编程方式进行编程。还有哪些其他最佳实践以及哪种情况最合适?

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

示例

ModuleA

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

ModuleB

Global cellReference = "B22"

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

ModuleA

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

ModuleB

deleted

说明

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

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

我知道,这些都是应该遵循的基本最佳实践。但也许有一些特别有助于防止共享状态。我认为Erik Meijer说如果你有共享状态通常会出现问题(我不确定我是否正确地引用了他)。

环境

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

2 个答案:

答案 0 :(得分:0)

我真的不知道我是否理解清楚,但如果我遇到很多共享状态的问题,我会使用一些state machine

有了这个,您可能能够找出依赖于状态的代码以及代码交叉的代码......

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

希望它有所帮助!

答案 1 :(得分:0)

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

稍后你可以分析方法,找到代码重复(通常在这种软件上有很多重复...)也许,根据应用程序所获得的知识,你甚至可以去进一步使用一些状态机.. (你说你接受它,它给了它作为答案)