Я начал использовать классы VBA, и я всегда пытался написать свой код таким образом, чтобы каждый класс был «независимым», то есть он имел все, что ему нужно - константы, функции и т. Д. - внутри. Однако в последнее время этот подход привел к дублированию кода, поскольку вместо вызова публичных функций в разных модулях я скопировал некоторый код из «внешнего мира» (в том же проекте) в класс, чтобы поддерживать его «самодостаточность», ,Является ли хорошей практикой использование глобальных констант, типов и функций внутри классов 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
Обратите внимание на коды с «< ====» в комментариях; класс использует типы, функции и константы, определенные вне класса, и именно это заставляет меня задаться вопросом, является ли это хорошей практикой или есть лучший вариант. Наверное, я просто не полностью понимаю концепцию инкапсуляции.
Просьба представить некоторый пример кода для людей, чтобы понять, «говорит мне, что это не может быть хорошей практикой.» – shahkalpesh
http://www.cpearson.com/excel/classes.aspx – JMax
Было бы неплохо узнать, имеете ли вы в виду хорошую практику против какой-либо вещи .. Обычно это только для вас самих, и вы можете это понять, тогда это хорошая практика ... – gbianchi