Jest to bardzo stary temat, który jednak pojawił się w mojej opinii na tym późnym etapie i chciałbym skomentować, gdy próbuję uzasadnić właściwości tylko do zapisu ...
Mam zestaw ActiveReport
klas, które są częścią strony internetowej, które są tworzone i uruchamiane w trybie postback po kilku wyborach użytkowników.
Kod VB wygląda mniej więcej tak:
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
Te raporty używają ogólnych odwzorowań, CommonReader
biorą procedurę składowaną i tablicę domyślnych SqlParameter
s, z których każdy ma powiązaną właściwość WriteOnly, która w zależności od projektu raportu może zostać przekazana jako parametr podczas tworzenia instancji lub ustawiona przez użytkownika po utworzeniu instancji przed wywołanie Run
metody raportów .
'''''''''''''''''''''''
' 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()
Tak więc, jak widzę, w tym przypadku ma właściwość tylko do zapisu
- Umożliwia silniejsze sprawdzanie typu, ponieważ
SqlParameter
s są rodzajowe
- Dzięki większej elastyczności tworzenia raportu, raport może zostać utworzony natychmiast, jeśli wszystkie parametry będą dostępne lub dodane później, gdy staną się dostępne.
- Właściwości obsługują składnię „With” przy tworzeniu instancji
- Czy „getter” jest naprawdę konieczny, ponieważ parametry są znane użytkownikowi i nie są zmieniane w raporcie?
- Ponieważ
SqlParameter
s są klasami, a nie pierwotnymi wartościami, WriteOnly Properties pozwala na prostszy interfejs do ustawiania parametrów
Więc to są moje myśli.
Czy zamiast tego mogę przekonwertować go na metodę? jasne, ale interfejs wydaje się ... mniej przyjemny
R2.BudgetID = SomeBudgetID
przeciw
R2.SetBudgetID(SomeBudgetID)