0

我有两个类,RecordSet 和 Record。RecordSet 有一个通用列表(记录)。

我可以通过调用我的 RecordSet.AddRecord(ObjRecord) 函数将对象添加到列表中,该函数返回 RecordSet。当列表计数为 200 时,进行一些处理并返回一个新的 RecordSet 对象,否则返回自身,应用程序可以继续将 Record 对象添加到列表中。

我担心的是在垃圾收集完成之前会有 200 个 RecordSet 对象。这是一个好主意吗?

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.
4

1 回答 1

0

首先,这是非常糟糕的做法,新人很难遵循代码并且是潜在的错误来源。与其每次都返回自己,不如改变你的设计。

将您的功能更改为:

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 完全按照它所说的去做——它添加了一条新记录并修改了记录集。ProcessTheRecords 按照它应该做的那样进行处理,如果您需要清除列表容器 - 哦,好吧,只需清除它。

我强烈建议阅读这篇关于 Cohesion的 wiki 文章。

就像一个提议一样,AddRecord 可以是一个返回类型的函数Boolean,它表示操作成功(也许处理函数会引发错误或异常?)。

现在干净多了,不是吗?

于 2013-02-08T21:52:25.750 回答