在整个应用程序中使用相同的数据还是复制它?

Use same data throughout application or copy it?

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

  1. 发送对列表对象的引用
  2. "Shallow"复制数据:创建一个包含对原始对象的引用的新列表
  3. 深拷贝数据

我猜 1. & 2. 会被认为是糟糕的设计,因为数据没有被封装。但它还有以下好处:

在整个应用程序中保持数据一致会产生大量易于出错的实施开销。由于这是一个封闭的应用程序,因此不会发生 "unauthorized" 不应传播(自动)的数据更改。

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

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

一切都归结为您使用的项目的设计。

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

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

因此,如果您只需要访问对象,请选择浅层 copy/referencing,如果您同时执行任何操作,请选择深拷贝!!!