¿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 de 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 he configurado de esta manera es para que en mi código principal no tenga que actualizar dos propiedades cada vez que quiera cambiar el estilo (la propiedad TableStyle de la clase MySheet Y la propiedad TableSTyle del ListObject). Así que en mi código principal puedo tener:

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

La última línea luego almacena tanto el valor de 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?

    
pregunta Excel Developers 15.12.2015 - 12:25

2 respuestas

1

Es posible que tenga otras razones para "almacenar en caché" TableStyle localmente, pero, de lo contrario, puede verse como una "optimización prematura". La propiedad se podría implementar 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
    
respondido por el Mark Hurd 13.08.2016 - 23:15
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 lo hago. piense que vale la pena la complejidad adicional de 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).

    
respondido por el kingfrito_5005 11.05.2017 - 18:36

Lea otras preguntas en las etiquetas