นี่เป็นหัวข้อที่เก่ามาก แต่มีสิ่งหนึ่งที่พุ่งเข้ามาในมุมมองของฉันในช่วงปลายปีนี้และฉันต้องการความคิดเห็นบางอย่างเนื่องจากฉันพยายามสร้างเคสสำหรับคุณสมบัติแบบเขียนอย่างเดียว ...
ฉันมีชุดActiveReport
คลาสที่เป็นส่วนหนึ่งของเว็บไซต์ที่มีอินสแตนซ์และเรียกใช้บน postback หลังจากมีการเลือกผู้ใช้จำนวนมาก
รหัส 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
ประเภททั่วไป
- มีความยืดหยุ่นมากขึ้นในการสร้างรายงานรายงานสามารถสร้างอินสแตนซ์ได้ทันทีหากพารามิเตอร์ทั้งหมดพร้อมใช้งานหรือเพิ่มหลังจากนั้นเมื่อพร้อมใช้งาน
- คุณสมบัติรองรับไวยากรณ์ "พร้อม" ในการสร้างอินสแตนซ์
- "getter" จำเป็นจริงๆหรือไม่เนื่องจากผู้ใช้รู้จักพารามิเตอร์และไม่ได้ทำการเปลี่ยนแปลงโดยรายงาน
- เนื่องจาก
SqlParameter
s เป็นคลาสและไม่ใช่ค่าดั้งเดิมคุณสมบัติ WriteOnly อนุญาตให้มีอินเตอร์เฟสที่ง่ายกว่าสำหรับการตั้งค่าพารามิเตอร์
นั่นคือความคิดของฉัน
ฉันสามารถแปลงเป็นวิธีการแทนได้หรือไม่? แน่นอน แต่ดูเหมือนว่าอินเตอร์เฟสจะไม่ค่อยดีนัก
R2.BudgetID = SomeBudgetID
กับ
R2.SetBudgetID(SomeBudgetID)