Empecé a usar clases de VBA y siempre he tratado de escribir mi código de modo que cada clase sea "independiente", es decir, tiene todo lo que necesita, constantes, funciones, etc. dentro. Últimamente, sin embargo, este enfoque ha resultado en duplicación de código ya que, en lugar de llamar funciones públicas en diferentes módulos, copié un código del "mundo exterior" (en el mismo proyecto) en una clase solo para mantener su "autosuficiencia" .¿Es una buena práctica usar constantes, tipos y funciones globales dentro de las clases de VBA?
Estoy considerando cambiar algunas clases para que puedan acceder a funciones, constantes, tipos, etc. desde otros módulos como cualquier otro módulo, pero algo en mí me dice que esto podría no ser una buena práctica. ¿Puede alguien decirme que lo que la pequeña voz dice es incorrecto? ¿Hay un mejor enfoque?
Gracias.
actualizaciones:
Mis disculpas por no proporcionar detalles anteriormente. He aquí un ejemplo de código:
'-------------------------------------
'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
Nota con los códigos "< ====" en los comentarios; la clase usa tipos, funciones y constantes definidas fuera de la clase, y esto es lo que me hace preguntarme si es una buena práctica o si hay una mejor opción. Supongo que simplemente no entiendo completamente el concepto de encapsulación.
favor proporcionar algún ejemplo de código para la gente a entender "me está diciendo esto podría no ser una buena práctica." – shahkalpesh
http://www.cpearson.com/excel/classes.aspx – JMax
Sería bueno saber si se refiere a una buena práctica en contra de lo que ... por lo general, esto es solo para usted y usted puede entenderlo, entonces es una buena práctica ... – gbianchi