Đây là một chủ đề rất cũ nhưng một chủ đề đã nhảy vào tầm nhìn của tôi ở giai đoạn cuối này và tôi muốn có một số ý kiến khi tôi cố gắng tạo ra một trường hợp cho các thuộc tính chỉ viết ...
Tôi có một tập hợp các ActiveReport
lớp là một phần của trang web được khởi tạo và chạy trên postback sau một số lựa chọn của người dùng.
Mã VB trông giống như thế này:
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
Các báo cáo này sử dụng can đảm chung, CommonReader
thực hiện một quy trình được lưu trữ và một mảng SqlParameter
s mặc định , mỗi trong số đó có thuộc tính WriteOnly liên quan, tùy thuộc vào thiết kế báo cáo, có thể được truyền vào dưới dạng tham số trên khởi tạo hoặc được đặt bởi người dùng sau khi khởi tạo trước gọi Run
phương thức báo cáo .
'''''''''''''''''''''''
' 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()
Vì vậy, như tôi thấy, có tài sản chỉ ghi trong trường hợp này
- Cho phép kiểm tra loại mạnh hơn vì
SqlParameter
s là loại chung
- Linh hoạt hơn trong việc tạo báo cáo, báo cáo có thể được khởi tạo ngay lập tức nếu tất cả các tham số có sẵn hoặc được thêm vào sau khi chúng có sẵn.
- Thuộc tính hỗ trợ cú pháp "With" khi khởi tạo
- Là một "getter" thực sự cần thiết vì người dùng đã biết các thông số và không bị thay đổi bởi Báo cáo?
- Vì
SqlParameter
s là một lớp và không phải là giá trị nguyên thủy, WriteOnly Properties cho phép giao diện đơn giản hơn để đặt tham số
Đó là suy nghĩ của tôi.
Tôi có thể chuyển đổi nó thành một phương thức thay thế? chắc chắn nhưng giao diện có vẻ ... kém đẹp
R2.BudgetID = SomeBudgetID
đấu với
R2.SetBudgetID(SomeBudgetID)