Это очень старая тема, но она зашла в мою точку зрения на этом позднем этапе, и я хотел бы получить некоторые комментарии, поскольку я пытаюсь обосновать свойства только для записи ...
У меня есть набор 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
, каждый из которых имеет соответствующее свойство 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 являются классами, а не примитивными значениями, свойства WriteOnly позволяют упростить интерфейс для настройки параметров.
Так что это мои мысли.
Могу ли я вместо этого преобразовать его в метод? конечно, но интерфейс кажется ... менее приятным
R2.BudgetID = SomeBudgetID
против
R2.SetBudgetID(SomeBudgetID)