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代码并生成属性文件可能是有用的。以后你可以分析方法,找到重复的代码,在这种软件上有很多重复的代码是很常见的。。。也许,有了应用程序所需的知识,你可以更进一步,使用一些状态机……你是对的:很多重构是最有可能的方法。是的,到处都是重复的代码。如果你 如果你想添加你的评论作为答案,我会接受它作为答案。