Questo è un argomento molto vecchio, ma che è saltato alla mia vista in questa fase avanzata e vorrei alcuni commenti mentre provo a fare un caso per proprietà di sola scrittura ...
Ho un insieme di ActiveReport
classi che fanno parte di un sito Web che sono istanziate ed eseguite sul postback dopo una serie di selezioni dell'utente.
Il codice VB è simile al seguente:
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
Questi report usano budella generiche, accettano CommonReader
una procedura memorizzata e una matrice di SqlParameter
valori predefiniti , ognuno dei quali ha una proprietà WriteOnly associata che, a seconda della progettazione del report, può essere passata come parametro all'istanza o impostata dall'utente dopo l'istanza prima chiamando il Run
metodo dei rapporti .
'''''''''''''''''''''''
' 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()
Quindi, per come la vedo io, ho proprietà di sola scrittura in questo caso
- Consente un controllo del tipo più forte poiché
SqlParameter
i tipi sono generici
- Maggiore flessibilità nella creazione del report, il report può essere istanziato immediatamente se tutti i parametri sono disponibili o aggiunti successivamente non appena diventano disponibili.
- Le proprietà supportano la sintassi "Con" all'istanza
- Un "getter" è davvero necessario poiché i parametri sono noti all'utente e non modificati dal Rapporto?
- Poiché le
SqlParameter
s sono classi e non valori primitivi, le proprietà WriteOnly consentono un'interfaccia più semplice per l'impostazione dei parametri
Quindi sono i miei pensieri.
Potrei invece convertirlo in un metodo? certo ma l'interfaccia sembra ... meno carina
R2.BudgetID = SomeBudgetID
contro
R2.SetBudgetID(SomeBudgetID)