Це дуже стара тема, але ця, яка ввійшла до моєї точки зору на цій пізній стадії, і мені хотілося б зауважити, коли я намагаюся скласти справу про властивості лише для запису ...
У мене є набір ActiveReport
класів, які є частиною веб-сайту, який створений за допомогою екземпляра та працює за допомогою постбекбека після декількох виборів користувачів.
Код VB виглядає приблизно так:
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
Ці звіти використовують загальні кишки, CommonReader
займає збережену процедуру і масив SqlParameter
s за замовчуванням , кожен з яких має пов'язане властивість WriteOnly, яке, в залежності від дизайну звіту, може бути передано як параметр для інстанції або встановлено користувачем після інстанції до виклик 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()
Отже, як я бачу, маючи в цьому випадку властивість лише для запису
- Дозволяє більш сильно перевіряти тип, оскільки
SqlParameter
s є загальними
- Більшу гнучкість у створенні звіту можна звітувати негайно, якщо всі параметри будуть доступні або додані потім, коли вони стануть доступними.
- Властивості підтримують синтаксис "З" при створенні інстанцій
- Чи дійсно необхідний "гетьтер", оскільки параметри відомі користувачеві та не змінюються у Звіті?
- Оскільки
SqlParameter
s є класами, а не примітивними значеннями, Properties Properties властивості WriteOnly дозволяють створити більш простий інтерфейс для встановлення параметрів
Так це мої думки.
Чи можу я замість цього перетворити його на метод? Впевнений, але інтерфейс здається ... менш приємним
R2.BudgetID = SomeBudgetID
проти
R2.SetBudgetID(SomeBudgetID)