¿Está bien tener una propiedad de tipo objeto COM?

8

Estoy desarrollando un complemento COM para Microsoft Excel, usando VB.Net. Escribí una clase para representar una hoja de trabajo que contiene ciertos elementos. Digamos, por ejemplo, que tiene un ListObject. Creo una propiedad para ListObject como esta:

Public Class MySheet

Private myTable as Excel.ListObject
Public Property Table() As Excel.ListObject
    Get
        Return myTable
    End Get
    Set(ByVal value As Excel.ListObject)
        myTable = value
    End Set
End Property

Luego tengo propiedades (en la clase MySheet) que representan atributos del ListObject, por ejemplo:

Private myTableStyle As String
Public Property TableStyle As String
    Get
        Return myTableStyle
    End Get
    Set(ByVal value As String)
        myTableStyle = value
        Me.Table.TableStyle = value
    End Set
End Property

La razón por la que lo configuré de esta manera es para que en mi código principal no tenga que actualizar dos propiedades cada vez que quiero cambiar el estilo (la propiedad TableStyle de la clase MySheet Y la propiedad TableSTyle del ListObject). Entonces, en mi código principal, puedo tener:

Dim MySheetObject As MySheet = New MySheet()
MySheetObject.Table = SomeListObject
MySheetObject.TableStyle = "TableStyleMedium4"

Esa última línea almacena el valor de la cadena como una propiedad del objeto MySheet y cambia la propiedad TableStyle del ListObject en Excel.

¿Está bien o está rompiendo algún principio de codificación?

Desarrolladores Excel
fuente

Respuestas:

1

Es posible que tenga otras razones para "almacenar en caché" TableStylelocalmente, pero, de lo contrario, puede verse como "optimización prematura". La propiedad podría implementarse como:

Public Property TableStyle As String
    Get
        Return Me.Table.TableStyle
    End Get
    Set(ByVal value As String)
        Me.Table.TableStyle = value
    End Set
End Property
Mark Hurd
fuente
1

Teniendo en cuenta que este es un programa que está inextricablemente vinculado a Excel, creo que es relativamente razonable tratar un Excel.ListObject de la misma manera que normalmente trataría un objeto .Net en este caso. Dicho esto, no creo que sea Vale la pena agregar la complejidad para tener un beneficio tan pequeño como no necesitar dos propiedades separadas (pero eso no tiene nada que ver con que sea un objeto COM).

kingfrito_5005
fuente