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

Vba 有哪些技术可以防止/删除共享状态?,vba,excel,Vba,Excel,问题 在某些情况下,共享状态是一件坏事。我现在在一个项目中,几乎所有方法都执行某种状态更改。我认为这是个问题。一方面,我不能重用这些方法,因为根据当前的系统状态,方法调用后的新系统状态将不同。另一方面,在这个项目中,测试相当困难或几乎不可能 问题: 所以我想知道有哪些技术可以防止共享状态或重构这样的应用程序,从而减少相互依赖 一种方法是以更具功能性的编程方式编程。还有哪些其他最佳实践,在哪些情况下最合适 如果代码示例有助于解释该技术,将不胜感激 范例 坏的 模 Public Sub DoSome

问题

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

问题:

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

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

如果代码示例有助于解释该技术,将不胜感激

范例

坏的

Public Sub DoSomething
    Range("A2").Value = Worksheets("Sheet2").Range(cellReference).Value + 10
End Sub
Public Sub DoSomething(resultCell, sourceSheet, sourceCell)
       Range(resultCell).Value = Worksheets(sourceSheet).Range(sourceCell).Value + 10
End Sub
模B

Global cellReference = "B22"
deleted
更好,因为没有全局变量的引用,也没有硬编码的表和单元格引用

Public Sub DoSomething
    Range("A2").Value = Worksheets("Sheet2").Range(cellReference).Value + 10
End Sub
Public Sub DoSomething(resultCell, sourceSheet, sourceCell)
       Range(resultCell).Value = Worksheets(sourceSheet).Range(sourceCell).Value + 10
End Sub
模B

Global cellReference = "B22"
deleted
解释

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

删除硬编码值并将其作为参数传递 删除对全局变量的引用,并将其作为参数传入 我知道,这些都是我们应该遵循的基本最佳实践。但也许有一些特别的措施可以防止共享状态。我想我说过,若你们有共同的状态,那个么通常会有一些错误,我不确定我引用他的话是否完全正确

环境


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

我真的不知道自己是否理解清楚,但如果我对许多共享状态有问题,我会使用一些

有了它,您可能会发现哪些代码是依赖于状态的,哪些代码是交叉的

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


希望有帮助

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

有了它,您可能会发现哪些代码是依赖于状态的,哪些代码是交叉的

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


希望有帮助

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

以后你可以分析方法,找到重复的代码,在这种软件上有很多重复的代码是很常见的。。。也许,有了应用程序所需的知识,你可以更进一步,使用一些状态机。。
你说你会接受它作为答案,我会大规模重构以尽可能多地删除全局变量,这将是第一步。 作为第二步,对硬代码进行一些重构并生成属性文件可能是有用的

以后你可以分析方法,找到重复的代码,在这种软件上有很多重复的代码是很常见的。。。也许,有了应用程序所需的知识,你可以更进一步,使用一些状态机。。
你说你会接受它,并给出答案

我在问题中添加了一个示例部分来澄清我的问题。感谢状态机提示。我在问题中添加了一个示例部分来澄清我的问题。感谢状态机的提示。我将大规模重构以尽可能多地删除全局变量,这将是第一步。作为第二步,重构had代码并生成属性文件可能是有用的。以后你可以分析方法,找到重复的代码,在这种软件上有很多重复的代码是很常见的。。。也许,有了应用程序所需的知识,你可以更进一步,使用一些状态机……你是对的:很多重构是最有可能的方法。是的,到处都是重复的代码。如果你想添加你的评论作为答案,我会接受它作为答案。我会大规模重构以尽可能多地删除全局变量,这将是第一步。作为第二步,重构had代码并生成属性文件可能是有用的。以后你可以分析方法,找到重复的代码,在这种软件上有很多重复的代码是很常见的。。。也许,有了应用程序所需的知识,你可以更进一步,使用一些状态机……你是对的:很多重构是最有可能的方法。是的,到处都是重复的代码。如果你 如果你想添加你的评论作为答案,我会接受它作为答案。