2010-10-01 66 views
1

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

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

问题

所以我想知道什么技术在那里防止共享状态或重构这样的应用程序,以便有依赖性少间。

一种方法是以更多功能的编程方式进行编程。还有哪些其他最佳做法,以及哪些情况最适合他们?

代码示例将非常赞赏,如果他们帮助解释技术。

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项目,没有软件工程背景的人开发的大量的遗留代码。不过,答案并不一定要针对这个特定的设置。

+0

我会大量重构删除尽可能多的全局变量,这将是第一步。 作为第二步,对had-code和制作属性文件的一些重构可能是有用的。 稍后,您可以分析方法,找到代码重复(通常在这类软件上有大量重复...) 也许,随着应用程序的知识需求,您可能可以更进一步并使用一些状态机... – SoulWanderer 2010-10-04 07:34:32

+0

你是对的:很多重构是最有可能的路要走。是的,许多重复的代码遍布整个地方。如果你想添加你的评论作为答案,我会接受它作为答案。 – Lernkurve 2010-10-04 18:12:44

回答

0

我会大量地重构以尽可能多地移除全局变量,那将是第一步。 作为第二步,对硬编码和制作属性文件的一些重构可能是有用的。

后来,你可以分析方法,找到代码重复(这是通常有很多重复这种软件......)也许,随着应用程序的知识,你可能能够去甚至进一步和使用一些状态机.. (你说你会接受它它给了它作为答案)

0

我真的不知道我是否已经清楚了解,但如果我遇到了大量共享状态问题,我会使用一些state machine

有了这个,你也许能找出代码是状态依赖和什么样的代码是跨...

例如,要建立一种工作流(大量的状态信息,要检查什么需要这是一个很好的解决方案,并且你有大量的文档...

希望它有帮助!

+0

我在我的问题中添加了一个示例部分来澄清我的问题。感谢状态机提示。 – Lernkurve 2010-10-01 08:30:20