Ist es in Ordnung, eine Eigenschaft vom Typ COM-Objekt zu haben?

8

Ich entwickle ein COM-Add-In für Microsoft Excel mit VB.Net. Ich habe eine Klasse geschrieben, um ein Arbeitsblatt darzustellen, das bestimmte Elemente enthält. Nehmen wir zum Beispiel an, es hat ein ListObject. Ich erstelle eine Eigenschaft für das ListObject wie folgt:

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

Ich habe dann Eigenschaften (in der MySheet-Klasse), die Attribute des ListObject darstellen, zum Beispiel:

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

Der Grund, warum ich es so eingerichtet habe, ist, dass ich in meinem Hauptcode nicht jedes Mal zwei Eigenschaften aktualisieren muss, wenn ich den Stil ändern möchte (die TableStyle-Eigenschaft der MySheet-Klasse UND die TableSTyle-Eigenschaft des ListObject). Also in meinem Hauptcode kann ich haben:

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

In dieser letzten Zeile wird dann sowohl der Zeichenfolgenwert als eine Eigenschaft des MySheet-Objekts gespeichert als auch die TableStyle-Eigenschaft des ListObject in Excel geändert.

Ist das in Ordnung oder verstößt es gegen ein Kodierungsprinzip?

Excel-Entwickler
quelle

Antworten:

1

Möglicherweise haben Sie andere Gründe, die TableStylelokal "zwischenzuspeichern" , andernfalls kann dies als "vorzeitige Optimierung" angesehen werden. Die Eigenschaft könnte implementiert werden als:

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
quelle
1

In Anbetracht dessen, dass dies ein Programm ist, das untrennbar mit Excel verbunden ist, halte ich es für relativ vernünftig, ein Excel.ListObject so zu behandeln, wie Sie normalerweise ein .Net-Objekt in diesem Fall behandeln würden. Abgesehen davon glaube ich nicht, dass dies der Fall ist ist die zusätzliche Komplexität wert, um einen so geringen Vorteil zu haben, dass keine zwei separaten Eigenschaften benötigt werden (aber das hat nichts damit zu tun, dass es sich um ein COM-Objekt handelt.)

kingfrito_5005
quelle