2016-06-21 89 views
1

假设我有一个ChatDataProvider类,它与服务器通信并包含Chat类型的对象列表(包含Post类型的对象等)。如果我想transfert这个聊天到其他类(以显示它们),我有几个可能的原因:在整个应用程序中使用相同的数据还是复制它?

  1. 发送到List对象的引用
  2. “浅”拷贝数据:创建新目录包含对原始对象
  3. 深层复制数据

我猜1 & 2.将被视为糟糕的设计,因为该数据没有封装引用。但它也有好处:

  • 数据的一致性(例如,如果条目的排序变化,我要么需要传播这一变化的深拷贝版本,应用相同的顺序出现,否则我就需要得到该列表的一个新的深层副本)

  • 减少内存使用

Keepting整个应用程序一致的数据创建了一个很大的开销实现是容易出错。因为这是一个封闭的应用程序,所以不会发生不应该被传播(自动)的数据中的“未经授权的”更改。

那么你会选择哪一个,为什么?两个opions都有效吗?

这个问题可能有答案,但我真的不知道要搜索什么。所以如果有人知道一些链接/资源,那很好。

回答

1

这一切都缩小到您使用的项目的设计。

1)如果您的应用程序需要使用许多其他软件包中的对象,请使用浅拷贝克隆而不是使用深拷贝方法来复制。 由于通过重新创建在一个对象中执行的操作来维护相同的数据,因此将耗费您的性能,内存并且也是一个乏味的效果。我会避免它。 2)如果你在同一个对象上同时执行操作,它很容易出错,它也不是一个好的设计。

因此,如果您只需访问该对象,或者对于Deep Copy,如果您正在同时执行任何操作,请进行浅拷贝/引用!