在整个申请中使用相同的数据还是复制它

时间:2016-06-21 04:48:59

标签: java application-design

假设我有一个ChatDataProvider类,它与服务器通信并包含Chat类型的对象列表(包含Post等类型的对象)。如果我想将这个聊天转移到另一个类(为了显示它们),我有几种可能性:

  1. 发送对List对象的引用
  2. "浅"复制数据:创建一个包含对原始对象的引用的新列表
  3. 深层复制数据
  4. 我想1.& 2.因为数据没有被封装,所以会被认为是糟糕的设计。但它也有以下好处:

    • 数据一致性(例如,如果条目的顺序发生变化,我需要将此更改传播到深层复制版本并在那里应用相同的顺序,或者我需要获取该列表的新深层副本)

    • 减少内存使用量

    在整个应用程序中保持数据一致会产生很大的实现开销,容易出错。由于这是一个封闭的应用程序,没有"未经授权的"将发生不应传播(自动)的数据更改。

    那么您会选择哪一个?为什么?两种选择都有效吗?

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

1 个答案:

答案 0 :(得分:1)

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

1)如果您的应用程序需要在许多其他包中使用该对象,请使用浅拷贝克隆而不是深拷贝方法来复制。 由于维护相同的数据,重新创建在一个对象中执行的操作,因此将耗费您的性能,内存并且还会产生繁琐的效果。我会避免它。

2)如果你同时对同一个对象进行操作,它很容易出错,也不是一个好的设计。

因此,如果您只是要访问该对象,则进行浅层复制/引用;如果您同时执行任何操作,则进行Deep copy !!!