Ini adalah topik yang sangat lama tetapi telah melompat ke pandangan saya pada tahap akhir ini dan saya ingin beberapa komentar ketika saya mencoba membuat kasus untuk properti hanya-tulis ...
Saya memiliki satu set ActiveReport
kelas yang merupakan bagian dari situs web yang dipakai dan berjalan pada postback setelah sejumlah pilihan pengguna.
Kode VB terlihat seperti ini:
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
Laporan-laporan ini menggunakan nyali generik, CommonReader
mengambil prosedur tersimpan dan larik default SqlParameter
, yang masing-masing memiliki properti WriteOnly terkait yang, tergantung pada desain laporan, dapat diteruskan sebagai parameter pada instantiasi atau ditetapkan oleh pengguna setelah instantiasi sebelumnya memanggil Run
metode laporan .
'''''''''''''''''''''''
' 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()
Jadi, seperti yang saya lihat, memiliki properti hanya menulis dalam kasus ini
- Mengizinkan pemeriksaan tipe yang lebih kuat karena
SqlParameter
jenisnya generik
- Lebih fleksibel dalam membuat laporan, laporan dapat segera dipakai jika semua parameter tersedia atau ditambahkan setelah mereka menjadi tersedia.
- Properti mendukung sintaks "With" pada instantiation
- Apakah "pengambil" benar-benar diperlukan karena parameter diketahui oleh pengguna dan tidak diubah oleh Laporan?
- Karena
SqlParameter
s adalah kelas dan bukan nilai primitif, Properti WriteOnly memungkinkan antarmuka yang lebih sederhana untuk pengaturan parameter
Jadi itulah pikiranku.
Bisakah saya mengubahnya menjadi metode saja? Tentu tetapi antarmuka tampaknya ... kurang bagus
R2.BudgetID = SomeBudgetID
melawan
R2.SetBudgetID(SomeBudgetID)