我有两个类,RecordSet和Record。 RecordSet有一个通用列表(记录)。
我可以通过调用RecordSet.AddRecord(ObjRecord)函数将对象添加到列表中,该函数返回RecordSet。当列表的计数为200时,会发生一些处理并返回一个新的RecordSet对象,否则返回自身,应用程序可以继续将Record对象添加到列表中。
我担心的是RecordSet会有200个对象,直到垃圾收集扫到它。这是个好主意吗?
Public Class RecordSet
Private lstRecords As New List(Of Record)
Public Function AddRecord(SomeVariable) AS RecordSet
lstRecords.Add(New Record())
If lstRecords.Count = 200 Then
Me.ProcessTheRecords()
Return New RecordSet()
Else
Return Me
End If
End Function
Private Sub ProcessTheRecords()
'Do stuff in here
End Sub
Private Class Record
Public Sub New()
End Sub
End Class
End Class
然后在我的申请中,我打电话给:
Dim objRecordSet AS New RecordSet
For Each VariableName In SomeList
objRecordSet = objRecordSet.AddRecord(VariableName)
Next
'Process the remaining objects in objRecordSet here.
答案 0 :(得分:0)
首先,这是一个非常糟糕的实践,很难跟踪新代码的代码并且是一个潜在的bug源。而不是每次都回归自己,改变你的设计。
将您的功能更改为:
Public Sub AddRecord(SomeVariable)
lstRecords.Add(New Record()) <--- should't you be doing something with SomeVariable?!
If lstRecords.Count = 200 Then
Me.ProcessTheRecords()
end if
End Function
Private Sub ProcessTheRecords()
'Do stuff in here
Me.lstRecords.clear()
End Sub
现在AddRecord完全按照它所说的做 - 它添加了一条新记录并修改了recordSet。 ProcessTheRecords按照预期的方式进行处理,如果你需要清除列表容器 - 哦,好吧,只需清除它。
我强烈推荐阅读这篇关于wiki的文章 Cohesion
就像提案一样,AddRecord可以是返回类型Boolean
的函数,它表示操作成功(处理函数可能引发错误或异常?)。
现在它变得更干净了,不是吗?