Este é um tópico muito antigo, mas que surgiu na minha opinião neste estágio final e eu gostaria de alguns comentários enquanto tentava defender propriedades somente para gravação ...
Eu tenho um conjunto de ActiveReport
classes que fazem parte de um site que são instanciadas e executadas na postagem após várias seleções de usuários.
O código VB é mais ou menos assim:
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
Esses relatórios usam tripas genéricas, usam CommonReader
um procedimento armazenado e uma matriz de SqlParameter
s padrão , cada um dos quais possui uma propriedade WriteOnly associada que, dependendo do design do relatório, pode ser transmitida como parâmetro na instanciação ou definida pelo usuário após instanciação antes chamando o Run
método de relatórios .
'''''''''''''''''''''''
' 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()
Então, a meu ver, ter propriedade somente gravação neste caso
- Permite uma verificação de tipo mais forte, já que
SqlParameter
s são genéricos
- Mais flexibilidade na criação do relatório, o relatório pode ser instanciado imediatamente se todos os parâmetros estiverem disponíveis ou adicionados posteriormente, à medida que estiverem disponíveis.
- Propriedades suportam sintaxe "With" na instanciação
- Um "getter" é realmente necessário, pois os parâmetros são conhecidos pelo usuário e não são alterados pelo relatório?
- Como
SqlParameter
s são classes e não valores primitivos, as Propriedades WriteOnly permitem uma interface mais simples para a configuração de parâmetros
Então esse é o meu pensamento.
Eu poderia convertê-lo em um método? claro, mas a interface parece ... menos agradável
R2.BudgetID = SomeBudgetID
versus
R2.SetBudgetID(SomeBudgetID)