Dies ist ein sehr altes Thema, aber eines, das mir zu diesem späten Zeitpunkt in den Sinn gekommen ist, und ich hätte gerne einige Kommentare, wenn ich versuche, für schreibgeschützte Eigenschaften einzutreten ...
Ich habe eine Reihe von ActiveReport
Klassen, die Teil einer Website sind, die instanziiert und nach einer Reihe von Benutzerauswahlen beim Postback ausgeführt werden.
Der VB-Code sieht ungefähr so aus:
Public Class SomeReport
Private greader As New GenericReporting.CommonReader("AStoredProcedure",
{New SqlParameter("budget_id", 0)})
Public WriteOnly Property BudgetID As Integer
Set(value As Integer)
greader.Parameters("budget_id").Value = value
End Set
End Property
Public Sub New(Optional budget_id As Integer = 0)
' This call is required by the designer.
InitializeComponent()
' Add any initialization after the InitializeComponent() call.
BudgetID = budget_id
End Sub
End Class
Diese Berichte verwenden generische Eingeweide, verwenden CommonReader
eine gespeicherte Prozedur und ein Array von Standardwerten SqlParameter
, denen jeweils eine WriteOnly-Eigenschaft zugeordnet ist, die je nach Berichtsdesign als Parameter bei der Instanziierung übergeben oder vom Benutzer nach der vorherigen Instanziierung festgelegt werden kann Aufruf der Berichtsmethode Run
.
'''''''''''''''''''''''
' Parameter taken from a user selected row of a GridView
'
Dim SomeBudgetID As Integer = gvBudgets.SelectedDataKey.Values(budget_id)
'''''''''''''''''''''''
' On Instantiation
'
Dim R as ActiveReport = New SomeReport(SomeBudgetID)
R.Run()
'''''''''''''''''''''''
' Or On Instantiation using "With" syntax
'
Dim R as ActiveReport = New SomeReport() With {.BudgetID = SomeBudgetID}
R.Run()
'''''''''''''''''''''''
' Or After
'
Dim R as ActiveReport = New SomeReport()
R.BudgetID = SomeBudgetID
R.Run()
Also, wie ich es sehe, in diesem Fall nur schreibgeschützt
- Ermöglicht eine stärkere Typprüfung, da
SqlParameter
s generisch sind
- Mehr Flexibilität beim Erstellen des Berichts. Der Bericht kann sofort instanziiert werden, wenn alle Parameter verfügbar sind oder später hinzugefügt werden, sobald sie verfügbar sind.
- Die Eigenschaften unterstützen die "With" -Syntax bei der Instanziierung
- Ist ein "Getter" wirklich notwendig, da die Parameter dem Benutzer bekannt sind und vom Bericht nicht geändert werden?
- Da es sich bei
SqlParameter
s um Klassen und nicht um primitive Werte handelt, ermöglichen die WriteOnly-Eigenschaften eine einfachere Schnittstelle zum Festlegen von Parametern
Das sind also meine Gedanken.
Könnte ich es stattdessen in eine Methode konvertieren? sicher, aber die Schnittstelle scheint ... weniger schön
R2.BudgetID = SomeBudgetID
gegen
R2.SetBudgetID(SomeBudgetID)