2016-06-21 36 views
1

假設我有一個ChatDataProvider類,它與服務器通信幷包含Chat類型的對象列表(包含Post類型的對象等)。如果我想transfert這個聊天到其他類(以顯示它們),我有幾個可能的原因:在整個應用程序中使用相同的數據還是複製它?

  1. 發送到List對象的引用
  2. 「淺」拷貝數據:創建新目錄包含對原始對象
  3. 深層複製數據

我猜1 & 2.將被視爲糟糕的設計,因爲該數據沒有封裝引用。但它也有好處:

  • 數據的一致性(例如,如果條目的排序變化,我要麼需要傳播這一變化的深拷貝版本,應用相同的順序出現,否則我就需要得到該列表的一個新的深層副本)

  • 減少內存使用

Keepting整個應用程序一致的數據創建了一個很大的開銷實現是容易出錯。因爲這是一個封閉的應用程序,所以不會發生不應該被傳播(自動)的數據中的「未經授權的」更改。

那麼你會選擇哪一個,爲什麼?兩個opions都有效嗎?

這個問題可能有答案,但我真的不知道要搜索什麼。所以如果有人知道一些鏈接/資源,那很好。

回答

1

這一切都縮小到您使用的項目的設計。

1)如果您的應用程序需要使用許多其他軟件包中的對象,請使用淺拷貝克隆而不是使用深拷貝方法來複制。 由於通過重新創建在一個對象中執行的操作來維護相同的數據,因此將耗費您的性能,內存並且也是一個乏味的效果。我會避免它。 2)如果你在同一個對象上同時執行操作,它很容易出錯,它也不是一個好的設計。

因此,如果您只需訪問該對象,或者對於Deep Copy,如果您正在同時執行任何操作,請進行淺拷貝/引用!

相關問題