Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Design patterns 将对象或基本ID传递给其他类?_Design Patterns - Fatal编程技术网

Design patterns 将对象或基本ID传递给其他类?

Design patterns 将对象或基本ID传递给其他类?,design-patterns,Design Patterns,我正在构建一个应用程序,用户可以在其中创建新对象(例如,文章)。每个项目都有一个原语唯一ID,所有这些项目都存储在SQL数据库中以及本地数据集中(例如,articleHolderlist) 为了保持数据新鲜,我时不时地从SQL DB重建整个本地acricleHolder。这将导致文章对象具有新引用。因此,我必须非常小心,因为我可能会得到内存泄漏或重复的项目 例如,如果我在另一个类中传递一个文章对象(例如,FavoriteActleView之后,articleHolder数据集使用具有新引用ID的

我正在构建一个应用程序,用户可以在其中创建新对象(例如,
文章
)。每个项目都有一个原语唯一ID,所有这些项目都存储在SQL数据库中以及本地数据集中(例如,
articleHolder
list)

为了保持数据新鲜,我时不时地从SQL DB重建整个本地
acricleHolder
。这将导致
文章
对象具有新引用。因此,我必须非常小心,因为我可能会得到内存泄漏或重复的项目

例如,如果我在另一个类中传递一个
文章
对象(例如,
FavoriteActleView
之后,
articleHolder
数据集使用具有新引用ID的所有
article
对象重建,
FavoriteActleView
articleHolder
中的项目可能相同,但引用不同,因此它们被视为不同。)

在我看来,我有两种解决方案:

  • 将基元ID传递给新类(
    FavoriteActleView
    ),然后在
    articleHolder
    数据集中查找
    article
    对象。此查找可能会根据
    articleHolder
    大小和类型产生开销
  • 传递对象,但不是完全重建
    articleHolder
    数据集,而是更新对象的内容。这将导致维护对象的引用,但需要更多的工作

有更好的解决方案吗?

我有点困惑:你是说
ArticleHolder
是一个缓存吗?如果是这样,你可以使用,缓存中的元素在一定时间后过期。这样,如果项目从缓存中过期,你只能从DB加载一些东西。不要实现缓存我们自己!有很多开源库可以为您做到这一点。(顺便说一下,我在这里提到的与依赖注入无关)同意@Augusto的建议。将来,你可能必须在集群上部署你的应用程序。在这种情况下,每个节点都有一个内存中的文章持有者不是一个好主意。我有点困惑:你是说
ArticleHolder
是一个缓存吗?如果是这种情况,你可以使用一个,缓存中的元素在一定时间后过期时间。通过这种方式,只有当项目从缓存中过期时,才能从DB中加载某些内容。不要自己实现缓存!有很多开源库可以为您实现这一点。(顺便说一下,我在这里提到的与依赖项注入无关)同意@Augusto的建议。将来,你可能需要在集群上部署你的应用程序。在这种情况下,每个节点都有一个内存中的文章持有者不是一个好主意。