2013-02-08 73 views
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. 
+5

這聽起來像一個糟糕的設計。 – SLaks 2013-02-08 15:42:07

+2

您正在從添加中返回全新的空記錄集,因此對舊文檔的引用正在丟失。存儲某些東西並丟失密鑰充其量等同於根本不存儲它。更糟糕的是,浪費代碼,cpu週期和系統內存。 – tucuxi 2013-02-08 15:46:20

+1

這似乎是一個更適合於Programmers.SE或codereview.SE的問題 – 2013-02-08 15:52:55

回答

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的函數,它表示操作成功(可能會由處理函數引發錯誤或異常?)。

現在更清潔了,不是嗎?

相關問題