向共享对象添加上下文数据

本文关键字:上下文 数据 添加 对象 共享 | 更新日期: 2023-09-27 18:10:58

我正在尝试提出一个通用模型,用于将一些上下文数据与c#中的对象相关联。我已经建立了一个缓存系统,可以描述如下…

Background Story ->缓存是一个单例实现,提供对频繁请求信息的"只读"访问,这是我在各种asp.net应用程序中使用的自定义CMS实现的一部分。我通过自己编写的桌面应用程序更新数据,下次web服务器加载缓存时,我的更改就会反映给访问者。我的缓存遵循以下规则…

  1. 每个对象都有一个唯一的id

  2. 任何对象都可以通过关联表中定义的id映射与任何其他对象相关联

  3. 无论存在多少个与特定对象的关联,该对象只有一个实例被加载到缓存中。

例如

…对象A可能关联到对象C的集合。类似地,对象B也可能关联到对象C的集合。如果一个人从对象A的实例请求id为23的对象C,然后从对象B请求id为23的对象C,他们将得到对象C的同一个实例的句柄。

我现在有一些数据要添加到图片中,但是这些数据本身不属于对象A,也不属于对象C。该数据是对象A与对象c之间关联的特定信息。

  1. 我的第一个想法:将额外的数据与对象C分开,因为它实际上不属于对象C本身。在对象A中维护此信息,并允许在Dictionary中查找它。我不喜欢以这种方式访问数据的方式。我宁愿通过Object C或派生类直接访问附加数据,以实现绑定目的和易用性。

  2. 我的第二个想法:从对象C(称为对象D)创建一个派生类,其中包含额外的上下文数据并提供易于访问的属性。这解决了绑定问题,并提供了我一直在寻找的易用性。我使用这种方法的问题是,现在我的对象A引用了对象D的集合,我需要通过复制对象A的全部数据来打破我的上述模型,以便我可以附加一些额外的关联信息。

我真正想要的是继续只拥有一个给定id的对象C实例,并附加一些可以在适当上下文中轻松访问的上下文数据和属性。这能做到吗?我也愿意接受任何其他的建议!我希望我的解决方案是通用的,合理的,这样我就可以忘记它,而不是一直渴望回去寻找更好的解决方案。

向共享对象添加上下文数据

objectc实例应该保存自己的数据。当然,你可以通过从缓存中检索到的对象(通过对象A或对象B)来存储"路径",但是在对象中存储这种信息会修改对象,所以如果要通过另一个"路径"检索,信息将被覆盖。

一个解决方案可以是克隆对象C每次从缓存中检索并存储您的"路径"在它,或存储您的额外数据,如果它是通过对象A?

这样,缓存中的所有对象在请求时都是共享的,但是在缓存之外是独立的。

我最终选择了第二个想法。Object D成为一种特殊类型的对象,它有自己的属性/成员/方法,但也有一个返回Object c的属性。Object D必须实现一个特定的接口,由我的缓存算法识别。我更新了我的缓存系统,以确保如果属性返回的Object C已经被加载,则返回该属性,而不是从db加载额外的副本。