Я начал использовать классы VBA и всегда пытался написать свой код так, чтобы каждый класс был «независимым», то есть в нем было все, что ему нужно - константы, функции и т. Д. - внутри. В последнее время, однако, этот подход привел к дублированию кода, поскольку вместо вызова открытых функций в разных модулях я скопировал некоторый код из «внешнего мира» (в том же проекте) в класс просто для поддержания его «самодостаточности» ,
Я подумываю об изменении нескольких классов, чтобы они могли получать доступ к функциям, константам, типам и т. Д. Из других модулей так же, как и любой другой модуль, но что-то во мне говорит мне, что это не может быть хорошей практикой , Может кто-нибудь сказать мне, что то, что говорит маленький голос, неправильно? Есть ли лучший подход?
Спасибо.
Обновление:
Мои извинения за то, что не предоставили детали ранее. Вот пример кода:
'-------------------------------------
'Module 1
'-------------------------------------
Public Const INITIAL_VALUE As String = "Start"
Public Const FINAL_VALUE As String = "End"
'more constants ...
Public Type SheetLoc
SheetName As String
SheetRow As Long
SheetColumn As Long
End Type
'more types ...
'-------------------------------------
'Module 2
'-------------------------------------
Public Function GetLocation(key As String) As SheetLoc
Dim myLoc As SheetLoc
'some codes here...
'
With myLoc
.SheetName = someValue
.SheetColumn = anotherValue
.SheetRow = stillAnotherValue
End With
GetLocation = myLoc
End Function
'more module functions
'-------------------------------------
'Class Module
'-------------------------------------
'some codes...
Public Sub SaveResults()
Dim currLoc As SheetLoc '<==== using a type defined outside of the class
'more declarations ....
'some codes here ....
If currentValue = INITIAL_VALUE Then '<=== referring to external constant
currLoc = GetLocation(someKey) '<=== calling an external function
ElseIf currentValue = FINAL_VALUE Then '<=== referring to an external constant
currLoc = GetLocation(anotherKey)
Else
currLoc = GetLocation(defaultKey)
End If
'populate data ...
'save results ...
End Sub
Обратите внимание на коды с «<====» в комментариях; класс использует типы, функции и константы, определенные вне класса, и именно это заставляет меня задуматься, является ли это хорошей практикой или есть лучший вариант. Полагаю, я просто не совсем понял концепцию инкапсуляции. </p>