Vba OOP提供便捷方法的最佳实践

Vba OOP提供便捷方法的最佳实践,vba,oop,Vba,Oop,我正在编写一个工厂类,该类应该允许以多种方式实例化一个对象。基本上,为了创建对象,可以提供参数A和B,或者只提供一个AB参数(事实是AB只是A和B的组合,以“->”作为分隔符)。因此,我的问题是: 提供多种设置和对象的方式,这是一个好主意吗? 如果是这样的话,最好用一种或多种方法来完成吗? 这种情况是否需要使用单独的具体工厂和抽象工厂 正如你可能已经发现的那样,我仍然在理解OOP的概念 我不认为这有什么关系,但我是用VBA编写代码的,但我有一种直觉,这种做法应该独立于您使用的语言(如果我错了,请

我正在编写一个工厂类,该类应该允许以多种方式实例化一个对象。基本上,为了创建对象,可以提供参数A和B,或者只提供一个AB参数(事实是AB只是A和B的组合,以“->”作为分隔符)。因此,我的问题是:

提供多种设置和对象的方式,这是一个好主意吗?
如果是这样的话,最好用一种或多种方法来完成吗?
这种情况是否需要使用单独的具体工厂和抽象工厂

正如你可能已经发现的那样,我仍然在理解OOP的概念


我不认为这有什么关系,但我是用VBA编写代码的,但我有一种直觉,这种做法应该独立于您使用的语言(如果我错了,请纠正我)。

这不太适合堆栈溢出,也不可能有明确的答案。话虽如此:1)我不明白为什么不应该使用Factory类,尽管这不是VBA中通常使用的(我倾向于使用常规函数来返回对象的实例)2)如果你有两种不同的方法来实例化你的对象,我会使用两种不同的方法3)这个问题没有答案,因为“requires”是非常主观的。提示:导出工厂类模块,在记事本中打开它,并将
VB\u属性\u predeclaredi
设置为
True
。然后该类将作为一个“静态类”运行,并且不需要实例化,这对于工厂来说是非常好的。COM喜欢工厂。根据您的具体代码,抽象工厂对于VBA来说可能有点过分,因为尽管有可能实现接口,但多态性/继承性是相当有限的。此外,如果您有一个工作的VBA抽象工厂实现,请随意将其带过来让同行评审—这将改变工作表中的内容!嗯@蒂姆·威廉姆斯?为什么工厂不是VBA中通常使用的东西?我一直在使用它们来回避一个事实,即没有任何构造函数。另外,如果你在VBA中编写代码库,它们是绝对必要的。这不太适合堆栈溢出,而且也没有明确的答案。话虽如此:1)我不明白为什么不应该使用Factory类,尽管这不是VBA中通常使用的(我倾向于使用常规函数来返回对象的实例)2)如果你有两种不同的方法来实例化你的对象,我会使用两种不同的方法3)这个问题没有答案,因为“requires”是非常主观的。提示:导出工厂类模块,在记事本中打开它,并将
VB\u属性\u predeclaredi
设置为
True
。然后该类将作为一个“静态类”运行,并且不需要实例化,这对于工厂来说是非常好的。COM喜欢工厂。根据您的具体代码,抽象工厂对于VBA来说可能有点过分,因为尽管有可能实现接口,但多态性/继承性是相当有限的。此外,如果您有一个工作的VBA抽象工厂实现,请随意将其带过来让同行评审—这将改变工作表中的内容!嗯@蒂姆·威廉姆斯?为什么工厂不是VBA中通常使用的东西?我一直在使用它们来回避一个事实,即没有任何构造函数。另外,如果你在VBA中编写代码库,它们是绝对必要的。这不太适合堆栈溢出,而且也没有明确的答案。话虽如此:1)我不明白为什么不应该使用Factory类,尽管这不是VBA中通常使用的(我倾向于使用常规函数来返回对象的实例)2)如果你有两种不同的方法来实例化你的对象,我会使用两种不同的方法3)这个问题没有答案,因为“requires”是非常主观的。提示:导出工厂类模块,在记事本中打开它,并将
VB\u属性\u predeclaredi
设置为
True
。然后该类将作为一个“静态类”运行,并且不需要实例化,这对于工厂来说是非常好的。COM喜欢工厂。根据您的具体代码,抽象工厂对于VBA来说可能有点过分,因为尽管有可能实现接口,但多态性/继承性是相当有限的。此外,如果您有一个工作的VBA抽象工厂实现,请随意将其带过来让同行评审—这将改变工作表中的内容!嗯@蒂姆·威廉姆斯?为什么工厂不是VBA中通常使用的东西?我一直在使用它们来回避一个事实,即没有任何构造函数。此外,如果您在VBA中编写代码库,它们是绝对必要的。